Package com.cooldatasoft.horizontal.dropdown.multiLevelCss

Source Code of com.cooldatasoft.horizontal.dropdown.multiLevelCss.MultiLevelCssMenu$MultiLevelMenu

package com.cooldatasoft.horizontal.dropdown.multiLevelCss;

import java.util.List;

import org.apache.wicket.core.util.string.JavaScriptUtils;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.request.resource.ResourceReference;

import com.cooldatasoft.common.MenuItem;

/**
* http://www.dynamicdrive.com/style/csslibrary/item/ jquery_multi_level_css_menu_2/
*
* @author Fatih Mehmet UCAR - fmucar@gmail.com
*
*/
public class MultiLevelCssMenu extends Panel implements IHeaderContributor {

  private static final long serialVersionUID = 1L;

  private final static ResourceReference DOWN_GIF = new PackageResourceReference(MultiLevelCssMenu.class, "js/down.gif");
  private final static ResourceReference RIGHT_GIF = new PackageResourceReference(MultiLevelCssMenu.class, "js/right.gif");

  private final static ResourceReference MENU_CSS = new CssResourceReference(MultiLevelCssMenu.class,
      "css/MultiLevelCssMenu.css");
  private final static ResourceReference JQUERY_MIN_JAVASCRIPT = new JavaScriptResourceReference(MultiLevelCssMenu.class,
      "js/jqueryMin.js");
  private final static ResourceReference MENU_JAVASCRIPT = new JavaScriptResourceReference(MultiLevelCssMenu.class,
      "js/MultiLevelCssMenu.js");

  @Override
  public void renderHead(IHeaderResponse response) {

    StringBuffer buffer = new StringBuffer();
    buffer.append("var downGifRelativeLocation='").append(RequestCycle.get().urlFor(DOWN_GIF, null)).append("';");
    buffer.append("var rightGifRelativeLocation='").append(RequestCycle.get().urlFor(RIGHT_GIF, null)).append("';");

    response.getResponse().write(JavaScriptUtils.SCRIPT_OPEN_TAG);
    response.getResponse().write(buffer.toString());
    response.getResponse().write(JavaScriptUtils.SCRIPT_CLOSE_TAG);

   
    response.render(JavaScriptHeaderItem.forReference(JQUERY_MIN_JAVASCRIPT));
    response.render(JavaScriptHeaderItem.forReference(MENU_JAVASCRIPT));
    response.render(CssHeaderItem.forReference(MENU_CSS));
  }

  public MultiLevelCssMenu(String id, List<MenuItem> menuItemList) {
    super(id);
    setRenderBodyOnly(true);
    MultiLevelMenu multiLevelMenu = new MultiLevelMenu("multiLevelMenu", menuItemList);
    multiLevelMenu.setRenderBodyOnly(true);
    add(multiLevelMenu);
  }

  private void processResponse(MenuItem menuItem) {
    switch (menuItem.getDestinationType()) {
    case EXTERNAL_LINK:
      // forward to external link
      break;
    case WEB_PAGE_CLASS:
      setResponsePage(menuItem.getResponsePageClass());
      break;
    case WEB_PAGE_INSTANCE:
      setResponsePage(menuItem.getResponsePage());
      break;
    case AJAX_TARGET:
      // DO Nothing as ajax will execute
      break;
    case NONE:
      // TODO throw exception
      break;
    }
  }

  class MultiLevelMenu extends Panel {

    private static final long serialVersionUID = 1L;

    public MultiLevelMenu(String id, List<MenuItem> menuItemList) {
      super(id);
      if (menuItemList == null || menuItemList.size() == 0) {
        return;
      }
      ListView<MenuItem> menu = buildMultiLevelMenu("menuList", menuItemList);
      menu.setReuseItems(true);
      add(menu);
    }

    private ListView<MenuItem> buildMultiLevelMenu(String id, List<MenuItem> menuItemList) {
      return new ListView<MenuItem>(id, menuItemList) {
        private static final long serialVersionUID = 1L;

        public void populateItem(final ListItem<MenuItem> item) {
          final MenuItem menuItem = ((MenuItem) item.getModelObject());
          Link<MenuItem> link = new Link<MenuItem>("menuLink") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick() {
              if (menuItem != null) {
                processResponse(menuItem);
              }
            }
          };

          Label linkText = new Label("menuLinkText", menuItem.getMenuText());
          linkText.setRenderBodyOnly(true);
          link.add(linkText);
          item.add(link);

          List<MenuItem> submenuItemList = menuItem.getSubMenuItemList();
          // INFO If submenu exists, output it to html. If not, add
          // empty markup container and hide it.
          if (submenuItemList != null && submenuItemList.size() > 0) {
            MultiLevelMenu subLevelMenu = new MultiLevelMenu("submenuListContainer", submenuItemList);
            subLevelMenu.setRenderBodyOnly(true);
            item.add(subLevelMenu);
          } else {
            WebMarkupContainer submenuMarkupContainer = new WebMarkupContainer("submenuListContainer");
            submenuMarkupContainer.setRenderBodyOnly(true);
            item.add(submenuMarkupContainer);
          }
        }
      };
    }
  }
}
TOP

Related Classes of com.cooldatasoft.horizontal.dropdown.multiLevelCss.MultiLevelCssMenu$MultiLevelMenu

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.