"use strict";
"require baseclass";
"require ui";
return baseclass.extend({
  __init__: function () {
    ui.menu.load().then(L.bind(this.render, this));
  },
  render: function (tree) {
    var node = tree,
      url = "";
    this.renderModeMenu(node);
    if (L.env.dispatchpath.length >= 3) {
      for (var i = 0; i < 3 && node; i++) {
        node = node.children[L.env.dispatchpath[i]];
        url = url + (url ? "/" : "") + L.env.dispatchpath[i];
      }
      if (node) this.renderTabMenu(node, url);
    }
    document
      .querySelector(".showSide")
      .addEventListener(
        "click",
        ui.createHandlerFn(this, "handleSidebarToggle")
      );
    document
      .querySelector(".darkMask")
      .addEventListener(
        "click",
        ui.createHandlerFn(this, "handleSidebarToggle")
      );
    document.querySelector(".main > .loading").style.opacity = "0";
    document.querySelector(".main > .loading").style.visibility = "hidden";
    if (window.innerWidth <= 1152)
      document.querySelector(".main-left").style.width = "0";
    window.addEventListener("resize", this.handleSidebarToggle, true);
  },
  handleMenuExpand: function (ev) {
    var a = ev.target,
      ul1 = a.parentNode,
      ul2 = a.nextElementSibling;
    document.querySelectorAll("li.slide.active").forEach(function (li) {
      if (li !== a.parentNode || li == ul1) {
        li.classList.remove("active");
        li.childNodes[0].classList.remove("active");
      }
      if (li == ul1) return;
    });
    if (!ul2) return;
    if (
      ul2.parentNode.offsetLeft + ul2.offsetWidth <=
      ul1.offsetLeft + ul1.offsetWidth
    )
      ul2.classList.add("align-left");
    ul1.classList.add("active");
    a.classList.add("active");
    a.blur();
    ev.preventDefault();
    ev.stopPropagation();
  },
  renderMainMenu: function (tree, url, level) {
    var l = (level || 0) + 1,
      ul = E("ul", { class: level ? "slide-menu" : "nav" }),
      children = ui.menu.getChildren(tree);
    if (children.length == 0 || l > 2) return E([]);
    for (var i = 0; i < children.length; i++) {
      var isActive = L.env.dispatchpath[l] == children[i].name,
        submenu = this.renderMainMenu(
          children[i],
          url + "/" + children[i].name,
          l
        ),
        hasChildren = submenu.children.length;
      ul.appendChild(
        E(
          "li",
          {
            class: hasChildren
              ? "slide" + (isActive ? " active" : "")
              : isActive
              ? " active"
              : "",
          },
          [
            E(
              "a",
              {
                href: hasChildren ? "#" : L.url(url, children[i].name),
                class: hasChildren
                  ? "menu" + (isActive ? " active" : "")
                  : null,
                click: hasChildren
                  ? ui.createHandlerFn(this, "handleMenuExpand")
                  : null,
                "data-title": hasChildren
                  ? children[i].title
                  : _(children[i].title),
              },
              [_(children[i].title)]
            ),
            submenu,
          ]
        )
      );
    }
    if (l == 1) {
      var container = document.querySelector("#mainmenu");
      container.appendChild(ul);
      container.style.display = "";
    }
    return ul;
  },
  renderModeMenu: function (tree) {
    var ul = document.querySelector("#modemenu"),
      children = ui.menu.getChildren(tree);
    for (var i = 0; i < children.length; i++) {
      var isActive = L.env.requestpath.length
        ? children[i].name == L.env.requestpath[0]
        : i == 0;
      ul.appendChild(
        E("li", {}, [
          E(
            "a",
            {
              href: L.url(children[i].name),
              class: isActive ? "active" : null,
            },
            [_(children[i].title)]
          ),
        ])
      );
      if (isActive) this.renderMainMenu(children[i], children[i].name);
      if (i > 0 && i < children.length)
        ul.appendChild(E("li", { class: "divider" }, [E("span")]));
    }
    if (children.length > 1) ul.parentElement.style.display = "";
  },
  renderTabMenu: function (tree, url, level) {
    var container = document.querySelector("#tabmenu"),
      l = (level || 0) + 1,
      ul = E("ul", { class: "tabs" }),
      children = ui.menu.getChildren(tree),
      activeNode = null;
    if (children.length == 0) return E([]);
    for (var i = 0; i < children.length; i++) {
      var isActive = L.env.dispatchpath[l + 2] == children[i].name,
        activeClass = isActive ? " active" : "",
        className = "tabmenu-item-%s %s".format(children[i].name, activeClass);
      ul.appendChild(
        E("li", { class: className }, [
          E("a", { href: L.url(url, children[i].name) }, [
            _(children[i].title),
          ]),
        ])
      );
      if (isActive) activeNode = children[i];
    }
    container.appendChild(ul);
    container.style.display = "";
    if (activeNode)
      container.appendChild(
        this.renderTabMenu(activeNode, url + "/" + activeNode.name, l)
      );
    return ul;
  },
  handleSidebarToggle: function (ev) {
    var width = window.innerWidth,
      darkMask = document.querySelector(".darkMask"),
      mainRight = document.querySelector(".main-right"),
      mainLeft = document.querySelector(".main-left"),
      open = mainLeft.style.width == "";
    if (width > 1152 || ev.type == "resize") open = true;
    darkMask.style.visibility = open ? "" : "visible";
    darkMask.style.opacity = open ? "" : 1;
    if (width <= 1152) mainLeft.style.width = open ? "0" : "";
    else mainLeft.style.width = "";
    mainLeft.style.visibility = open ? "" : "visible";
    mainRight.style["overflow-y"] = open ? "visible" : "hidden";
  },
});