var messages = {}; var lang; var literal = true; var app; var tv; var tree; var cel; var clist; var blocklists = { "block.element": ["statement.obj", "statement.select"], "block.filter": ["statement.filter.type", "statement.filter.exp"], "block.object": ["statement.comp", "statement.prop", "statement.filter"], "block.root": ["statement.select", "statement.define"], "block.select": ["statement.select.type", "statement.select.exp"], }; var ilid = 0; var inputlists = { "input.comp": ["image", "polysec", "rect", "scale3", "text"], "input.prop": [ "pos", "rot", "scale", "image.fit", "image.frame", "image.opacity", "polysec.body", "polysec.head", "polysec.shape", "polysec.tail", "polysec.transparent", "rect.color", "scale3.border", "sprite.bound", "sprite.pivot", "sprite.scale", "sprite.transparent", "sprite.ui", "sprite.zindex", "text.frames", "text.opacity", "text.size", "text.spacing", "text.value", ], "input.type": ["chart", "group", "track", "note"], }; var statementlists = { "statement.comp": ["input.comp"], "statement.define": ["input.ident", "exp"], "statement.filter": ["block.filter", "block.object"], "statement.filter.exp": ["exp"], "statement.filter.type": ["input.type"], "statement.obj": ["block.object"], "statement.prop": ["input.prop", "exp"], "statement.select": ["block.select", "block.element"], "statement.select.exp": ["exp"], "statement.select.type": ["input.type"], } 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 (event) { if (clist) clist.remove(); }); tv.on("mousemove", null, null, onMouseMove); $(".tgbtn").on("click", function (event) { 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); } 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"); 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 = $("
").addClass("grab-ptr"); } } function onMouseMove(event) { if (grabbing) { var l = grabbing.parent().children(".t-statement"); var i = getGrabPtrIndex(event.pageY + tv.scrollTop() - tv[0].offsetTop); if (i == l.length) grabPointer.remove().insertAfter(l.last()); else grabPointer.remove().insertBefore(l.eq(i)); } } function getGrabPtrIndex(y) { var l = grabbing.parent().children(".t-statement"); var tl = l.map(function (i) { return l[i].offsetTop - y; }).toArray(); tl.push(l.last()[0].offsetTop + l.last().height() - y); return ArrayUtil.binarySearch(tl, 0, function (a, b) { return a - b; }, true); } function generateAddList(event, items) { event.stopPropagation(); if (clist) clist.remove(); var ul = $("").addClass("t-list"); for (var i in items) { var item = items[i]; ul.append($("
  • ").addClass("t-li").attr("key", item).text(msg("list." + item)).on("click", null, item, onAddItemClick)); } popup(event, ul); } function generateAddExpList(event, items) { event.stopPropagation(); if (clist) clist.remove(); var ul = $("").addClass("t-list t-exp-list"); for (var i in items) { var item = items[i]; ul.append($("
  • ").addClass("t-li").attr("key", item).text(msg("list." + item)).on("click", null, item, onAddItemClick)); } popup(event, ul); } function popup(event, ul) { clist = ul; app.append(ul); var left = event.pageX; if (left + ul.outerWidth() > window.innerWidth) left = Math.max(0, left - ul.outerWidth()); var top = event.pageY; if (top + ul.outerHeight() > window.innerHeight) top = Math.max(0, top - ul.outerHeight()); ul.css({ "left": left, "top": top }); } function generateInputList(el, key) { var il = inputlists[key]; if (!il) return; var id = "il-" + ilid.toString(); var dl = $("").attr("id", id); for (var i in il) { var li = il[i]; dl.append($("