From 6453fe1a2ae79a8050d630095a2b3130213b5be5 Mon Sep 17 00:00:00 2001 From: Emilio Dolce Date: Tue, 24 May 2016 23:21:31 +0200 Subject: [PATCH] Fix menu tag breadcrumbs --- .../runtime/springmvc/taglibs/MenuTag.java | 1242 +++---- .../src/main/resources/META-INF/js/picedit.js | 2 +- .../resources/META-INF/js/voila-general.js | 3042 ++++++++--------- 3 files changed, 2143 insertions(+), 2143 deletions(-) diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MenuTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MenuTag.java index ab99f814..e1f20bbd 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MenuTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MenuTag.java @@ -1,621 +1,621 @@ -package it.mice.voila.runtime.springmvc.taglibs; - -import it.mice.voila.runtime.springmvc.bean.PathStackElement; -import it.mice.voila.runtime.springmvc.util.SpringMvcUtil; -import it.mice.voila.runtime.web.bean.MenuDefinition; -import it.mice.voila.runtime.web.bean.MenuItemDefinition; -import it.mice.voila.runtime.web.menu.MenuDefinitionFactory; -import it.mice.voila.runtime.web.menu.MenuFilterManager; - -import java.util.Enumeration; -import java.util.StringTokenizer; - -import javax.servlet.jsp.JspException; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.web.context.support.WebApplicationContextUtils; -import org.springframework.web.servlet.tags.form.AbstractFormTag; -import org.springframework.web.servlet.tags.form.TagWriter; - -public class MenuTag extends AbstractFormTag { - /** - * serial version UID - */ - private static final long serialVersionUID = 1365950626443575870L; - - private static final Log logger = LogFactory.getLog(MenuTag.class); - - private static final String MENU_TYPE_CSS_MAIN = "css_main"; - private static final String MENU_TYPE_EXTJS = "extjs"; - private static final String MENU_TYPE_CSS_LEFT = "css_left"; - private static final String MENU_TYPE_BS_LEFT = "bs_left"; - private static final String MENU_TYPE_BREADCRUMB = "breadCrumb"; - private static final String MENU_TYPE_BS_BREADCRUMB = "bs_breadCrumb"; - private static final String MENU_TYPE_MENUPAGE = "menuPage"; - public static final String SAVED_MENU_DEFINITION = MenuTag.class.getName() + "."; - - private String menuId; - private String menuName; - private String menuType = MENU_TYPE_CSS_MAIN; - private String menuFilterManagerBeanName = "menuFilterManager"; - private int minLevel = 0; - private int maxLevel = 9; - private boolean cacheMenu = true; - private boolean appendStack = false; - private String currentHeaderKey = null; - - private String hrefCurrentElement = "true"; - private String renderLastBreadcrumbSymbol = "true"; - - private TagWriter tagWriter; - - public boolean isCacheMenu() { - return cacheMenu; - } - - /** - * @return the appendStack - */ - public boolean isAppendStack() { - return appendStack; - } - - /** - * @param appendStack the appendStack to set - */ - public void setAppendStack(boolean appendStack) { - this.appendStack = appendStack; - } - - public String getCurrentHeaderKey() { - return currentHeaderKey; - } - - public void setCurrentHeaderKey(String currentHeaderKey) { - this.currentHeaderKey = currentHeaderKey; - } - - /** - * @param menuId the menuId to set - */ - public void setMenuId(String menuId) { - this.menuId = menuId; - } - - public void setCacheMenu(boolean cacheMenu) { - this.cacheMenu = cacheMenu; - } - - public String getMenuName() { - return menuName; - } - - public void setMenuName(String menuName) { - this.menuName = menuName; - } - - public String getMenuType() { - return menuType; - } - - public void setMenuType(String menuType) { - this.menuType = menuType; - } - - public String getMenuFilterManagerBeanName() { - return menuFilterManagerBeanName; - } - - public void setMenuFilterManagerBeanName(String menuFilterManagerBeanName) { - this.menuFilterManagerBeanName = menuFilterManagerBeanName; - } - - public int getMinLevel() { - return minLevel; - } - - public void setMinLevel(int minLevel) { - this.minLevel = minLevel; - } - - public int getMaxLevel() { - return maxLevel; - } - - public void setMaxLevel(int maxLevel) { - this.maxLevel = maxLevel; - } - - public String getHrefCurrentElement() { - return hrefCurrentElement; - } - - public void setHrefCurrentElement(String hrefCurrentElement) { - this.hrefCurrentElement = hrefCurrentElement; - } - - public String getRenderLastBreadcrumbSymbol() { - return renderLastBreadcrumbSymbol; - } - - public void setRenderLastBreadcrumbSymbol(String renderLastBreadcrumbSymbol) { - this.renderLastBreadcrumbSymbol = renderLastBreadcrumbSymbol; - } - - @Override - protected int writeTagContent(TagWriter tagWriter) throws JspException { - this.tagWriter = tagWriter; - - if (logger.isDebugEnabled()) - logger.debug("Start building menu type: " + menuType + "..."); - - MenuFilterManager menuFilterManager = - (MenuFilterManager)WebApplicationContextUtils - .getRequiredWebApplicationContext( - this.pageContext.getServletContext()) - .getBean(getMenuFilterManagerBeanName()); - - MenuDefinition filteredMenuDefinition; - MenuDefinition menuDefinition = menuFilterManager.getMenu(getMenuName()); - - filteredMenuDefinition = getMenuDefinitionFromCache(); - if (filteredMenuDefinition == null) { - filteredMenuDefinition = menuFilterManager.getFilteredMenu(getMenuName()); - setMenuDefinitionToCache(filteredMenuDefinition); - } - - if (menuType.equals(MENU_TYPE_CSS_MAIN)) { - drawCssMenuDefinitionTree(filteredMenuDefinition, 0, getSelectedLevelTree(), true); - } else if (menuType.equals(MENU_TYPE_EXTJS)) { - } else if (menuType.equals(MENU_TYPE_CSS_LEFT)) { - drawCssMenuDefinitionTree(filteredMenuDefinition, 0, getSelectedLevelTree(), true); - } else if (menuType.equals(MENU_TYPE_BS_LEFT)) { - drawBsLeftMenuDefinitionTree(filteredMenuDefinition, 0, getSelectedLevelTree(), true); - } else if (menuType.equals(MENU_TYPE_BREADCRUMB)) { - drawBreadCrumb(menuDefinition, 0, getSelectedLevelTree(), true); - if (appendStack) { - drawPathStack(); - } - } else if (menuType.equals(MENU_TYPE_BS_BREADCRUMB)) { - drawBsBreadCrumb(menuDefinition, 0, getSelectedLevelTree(), true); - if (appendStack) { - drawBsPathStack(); - } - } else if (menuType.equals(MENU_TYPE_MENUPAGE)) { - drawMainMenuPage(filteredMenuDefinition); - } else { - JspException e = - new JspException("Invalid menuType value: " + menuType + ". Must be one of the following values: dhtml, css_main, css_left."); - throw e; - } - return EVAL_BODY_INCLUDE; - } - - private MenuDefinition getMenuDefinitionFromCache() { - MenuDefinition result; - if (isCacheMenu()) { - result = (MenuDefinition)pageContext.getSession().getAttribute(SAVED_MENU_DEFINITION + "_" + getMenuName()); - } else { - result = (MenuDefinition)pageContext.getRequest().getAttribute(SAVED_MENU_DEFINITION + "_" + getMenuName()); - } - return result; - } - - private void setMenuDefinitionToCache(MenuDefinition filteredMenuDefinition) { - if (isCacheMenu()) { - pageContext.getSession().setAttribute(SAVED_MENU_DEFINITION + "_" + getMenuName(), filteredMenuDefinition); - } else { - pageContext.getRequest().setAttribute(SAVED_MENU_DEFINITION + "_" + getMenuName(), filteredMenuDefinition); - } - } - - private void drawMainMenuPage(MenuDefinition filteredMenuDefinition) throws JspException { - MenuItemDefinition foundMenuItemDefinition = getMenuItemDefinitionById(filteredMenuDefinition, getMenuId()); - if (foundMenuItemDefinition != null) { - tagWriter.startTag("h3"); - if (foundMenuItemDefinition.getTitle() != null || foundMenuItemDefinition.getTitleKey() != null) { - tagWriter.appendValue(TagUtils.getMessage(getRequestContext(), foundMenuItemDefinition.getTitleKey(), foundMenuItemDefinition.getTitle())); - } else { - tagWriter.appendValue(TagUtils.getMessage(getRequestContext(), foundMenuItemDefinition.getContentKey(), foundMenuItemDefinition.getContent())); - } - tagWriter.endTag(); - tagWriter.startTag("p"); - tagWriter.writeAttribute("class", "menuLevel0"); - addDescriptionToParagraph(foundMenuItemDefinition); - tagWriter.endTag(); - drawMenuPage(foundMenuItemDefinition.getMenuToShow(), 0); - } else { - drawMenuPage(filteredMenuDefinition, 0); - } - } - - private void drawMenuPage(MenuDefinition menuDefinition, int levelDeep) throws JspException { - if (levelDeep > maxLevel) { - return; - } - tagWriter.startTag("ul"); - for (int i = 0; i < menuDefinition.getMenuItems().length; i++) { - MenuItemDefinition menuItemDefinition = menuDefinition.getMenuItems()[i]; - String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); - tagWriter.startTag("li"); - StringBuffer classContent = new StringBuffer("menuLevel" + (levelDeep + 1)); - if (menuItemDefinition.isFlagDisabled()) { - classContent.append(" disabled"); - } - if (menuItemDefinition.isFlagRestricted()) { - classContent.append(" restricted"); - } - tagWriter.writeAttribute("class", classContent.toString()); - - if (menuItemDefinition.isFlagDisabled()) { - tagWriter.startTag("span"); - } else { - tagWriter.startTag("a"); - tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); - addTargetToAnchor(menuItemDefinition); - } - addTitleToAnchor(menuItemDefinition); - addOnClickToAnchor(menuItemDefinition); - tagWriter.appendValue(caption); - tagWriter.endTag(); - - if (levelDeep < maxLevel) { - tagWriter.startTag("p"); - tagWriter.writeAttribute("class", "menuLevel" + (levelDeep + 1)); - addDescriptionToParagraph(menuItemDefinition); - tagWriter.endTag(); - } - if (menuItemDefinition.getMenuToShow() != null) { - drawMenuPage(menuItemDefinition.getMenuToShow(), (levelDeep + 1)); - } - tagWriter.endTag(); - } - tagWriter.endTag(); - } - - private void addDescriptionToParagraph(MenuItemDefinition menuItemDefinition) throws JspException { - String description = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getDescriptionKey(), menuItemDefinition.getDescription()); - if (description != null) { - tagWriter.appendValue(description); - } - } - - private MenuItemDefinition getMenuItemDefinitionById(MenuDefinition menuDefinition, String menuId) { - MenuDefinition currentMenuDefinition = menuDefinition; - MenuItemDefinition selectedMenuItemDefinition = null; - for (int i=0; i maxLevel) { - return; - } - tagWriter.startTag("ul"); - if (levelDeep == 0) { - tagWriter.writeAttribute("id", menuType); - } - for (int i = 0; i < filteredMenuDefinition.getMenuItems().length; i++) { - boolean isElementSelected = false; - MenuItemDefinition menuItemDefinition = filteredMenuDefinition.getMenuItems()[i]; - int[] currentMenuItemId = convertToLevelTree(menuItemDefinition.getItemId()); - if (selectedLevelTree[levelDeep] == currentMenuItemId[levelDeep] && isParentSelected) { - if ((menuType.equals(MENU_TYPE_CSS_LEFT)) && (menuItemDefinition.getMenuToShow() == null)) { - // per il left menu se il menu item e' una foglia, va indicato come selezionato - // solo se la voce risulta effettivamente selezionata - if (menuItemDefinition.getItemId().equals(getMenuId())) { - isElementSelected = true; - } - } else { - isElementSelected = true; - } - } - if (levelDeep >= minLevel || (levelDeep < minLevel && isElementSelected)) { - String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); - StringBuffer classContent = new StringBuffer(); - if (isElementSelected) { - classContent.append(" selected"); - } - if (menuItemDefinition.isFlagDisabled()) { - classContent.append(" disabled"); - } - if (menuItemDefinition.isFlagRestricted()) { - classContent.append(" restricted"); - } - tagWriter.startTag("li"); - if (classContent.length() > 0) { - tagWriter.writeAttribute("class", classContent.toString().trim()); - } - if (menuItemDefinition.isFlagDisabled()) { - tagWriter.startTag("span"); - } else { - tagWriter.startTag("a"); - tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); - addTargetToAnchor(menuItemDefinition); - } - addTitleToAnchor(menuItemDefinition); - addOnClickToAnchor(menuItemDefinition); - tagWriter.appendValue(caption); - tagWriter.endTag(); - if (menuItemDefinition.getMenuToShow() != null) { - drawCssMenuDefinitionTree(menuItemDefinition.getMenuToShow(), - (levelDeep + 1), - selectedLevelTree, - isElementSelected); - } - tagWriter.endTag(); - } - } - tagWriter.endTag(); - } - - private void drawBsLeftMenuDefinitionTree(MenuDefinition filteredMenuDefinition, - int levelDeep, - int[] selectedLevelTree, - boolean isParentSelected) - throws JspException - { - if (levelDeep > maxLevel) { - return; - } - for (int i = 0; i < filteredMenuDefinition.getMenuItems().length; i++) { - boolean isElementSelected = false; - MenuItemDefinition menuItemDefinition = filteredMenuDefinition.getMenuItems()[i]; - int[] currentMenuItemId = convertToLevelTree(menuItemDefinition.getItemId()); - if (selectedLevelTree[levelDeep] == currentMenuItemId[levelDeep] && isParentSelected) { - if (menuItemDefinition.getMenuToShow() == null) { - // per il left menu se il menu item e' una foglia, va indicato come selezionato - // solo se la voce risulta effettivamente selezionata - if (menuItemDefinition.getItemId().equals(getMenuId())) { - isElementSelected = true; - } - } else { - isElementSelected = true; - } - } - if (levelDeep >= minLevel || (levelDeep < minLevel && isElementSelected)) { - String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); - StringBuffer classContent = new StringBuffer(); - if (menuItemDefinition.getMenuToShow() != null) { - classContent.append("treeview"); - } - if (isElementSelected) { - classContent.append(" active"); - } - if (menuItemDefinition.isFlagDisabled()) { - classContent.append(" disabled"); - } - if (menuItemDefinition.isFlagRestricted()) { - classContent.append(" restricted"); - } - tagWriter.startTag("li"); - if (classContent.length() > 0) { - tagWriter.writeAttribute("class", classContent.toString().trim()); - } - if (menuItemDefinition.isFlagDisabled()) { - tagWriter.startTag("span"); - } else { - tagWriter.startTag("a"); - tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); - if (menuItemDefinition.getMenuToShow() != null) { - tagWriter.writeAttribute("class", "noWaitPopup"); - } - addTargetToAnchor(menuItemDefinition); - } - addTitleToAnchor(menuItemDefinition); - addOnClickToAnchor(menuItemDefinition); - - tagWriter.startTag("i"); - tagWriter.writeAttribute("class", "fa " + (menuItemDefinition.getMenuToShow() == null ? "fa-angle-double-right" : "fa-circle-o")); - tagWriter.endTag(true); // - tagWriter.startTag("span"); - - tagWriter.appendValue(caption); - - tagWriter.endTag(); // - - if (menuItemDefinition.getMenuToShow() != null) { - // - tagWriter.startTag("i"); - tagWriter.writeAttribute("class", "fa fa-angle-left pull-right"); - tagWriter.endTag(true); // - - tagWriter.endTag(); // or - - // - } else { - tagWriter.endTag(); // or - } - tagWriter.endTag(); // - } - } - } - - private void drawBreadCrumb(MenuDefinition menuDefinition, int levelDeep, int[] selectedLevelTree, boolean isParentSelected) throws JspException { - if (levelDeep > maxLevel) { - return; - } - for (int i = 0; i < menuDefinition.getMenuItems().length; i++) { - boolean isElementSelected; - if (selectedLevelTree[levelDeep] == (i + 1) && isParentSelected) { - MenuItemDefinition menuItemDefinition = menuDefinition.getMenuItems()[i]; - String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); - isElementSelected = true; - tagWriter.startTag("a"); - tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); - addTargetToAnchor(menuItemDefinition); - addTitleToAnchor(menuItemDefinition); - addOnClickToAnchor(menuItemDefinition); - if (menuItemDefinition.getMenuToShow() == null) { - tagWriter.writeAttribute("class", "selected"); - } - tagWriter.appendValue(caption); - tagWriter.endTag(); - if (menuItemDefinition.getMenuToShow() != null || evaluateBoolean("renderLastBreadcrumbSymbol", getRenderLastBreadcrumbSymbol())) { - TagUtils.safeWrite(pageContext, " > "); - } - if (menuItemDefinition.getMenuToShow() != null) { - drawBreadCrumb(menuItemDefinition.getMenuToShow(), (levelDeep + 1), selectedLevelTree, isElementSelected); - } - } - } - } - - private void drawPathStack() throws JspException { - Enumeration ePathStack = SpringMvcUtil.getStack().elements(); - while (ePathStack.hasMoreElements()) { - PathStackElement aPathStackElement = ePathStack.nextElement(); - - String caption = TagUtils.getMessage(getRequestContext(), aPathStackElement.getHeaderKey(), aPathStackElement.getHeaderKey()); - tagWriter.startTag("a"); - tagWriter.writeAttribute("href", SpringMvcUtil.getServerBaseUrl() + aPathStackElement.getPath()); - tagWriter.appendValue(caption); - tagWriter.endTag(); - TagUtils.safeWrite(pageContext, " > "); - } - } - - - private void drawBsBreadCrumb(MenuDefinition menuDefinition, int levelDeep, int[] selectedLevelTree, boolean isParentSelected) throws JspException { - if (levelDeep > maxLevel) { - return; - } - for (int i = 0; i < menuDefinition.getMenuItems().length; i++) { - if (selectedLevelTree[levelDeep] == (i + 1) && isParentSelected) { - MenuItemDefinition menuItemDefinition = menuDefinition.getMenuItems()[i]; - String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); - tagWriter.startTag("li"); - tagWriter.startTag("a"); - tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); - addTargetToAnchor(menuItemDefinition); - addTitleToAnchor(menuItemDefinition); - addOnClickToAnchor(menuItemDefinition); - tagWriter.appendValue(caption); - tagWriter.endTag(); - tagWriter.endTag(); - } - } - } - - private void drawBsPathStack() throws JspException { - Enumeration ePathStack = SpringMvcUtil.getStack().elements(); - while (ePathStack.hasMoreElements()) { - PathStackElement aPathStackElement = ePathStack.nextElement(); - - if (getCurrentHeaderKey() != null && !getCurrentHeaderKey().equals(aPathStackElement.getHeaderKey())) { - String caption = TagUtils.getMessage(getRequestContext(), aPathStackElement.getHeaderKey(), aPathStackElement.getHeaderKey()); - tagWriter.startTag("li"); - tagWriter.startTag("a"); - tagWriter.writeAttribute("href", SpringMvcUtil.getServerBaseUrl() + aPathStackElement.getPath()); - tagWriter.appendValue(caption); - tagWriter.endTag(); - tagWriter.endTag(); - } - } - } - - private String prepareLink(String link) { - if (!StringUtils.isEmpty(link) && link.startsWith("http")) { - return link; - } - return getRequestContext().getContextUrl(link); - } - - private int[] getSelectedLevelTree() { - String menuId = getMenuId(); - int[] selectedLevelTree = convertToLevelTree(menuId); - return selectedLevelTree; - } - - private String getMenuId() { - if (this.menuId != null) { - return this.menuId; - } - String menuId = pageContext.getRequest().getParameter(MenuDefinitionFactory.SELECTED_MENU_ID); - if (menuId == null) { - menuId = (String) pageContext.getSession().getAttribute(MenuDefinitionFactory.SELECTED_MENU_ID); - } else { - pageContext.getSession().setAttribute(MenuDefinitionFactory.SELECTED_MENU_ID, menuId); - } - return menuId; - } - - private int[] convertToLevelTree(String menuId) { - int[] returnLevelTree = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - if (menuId != null) { - int counter = 0; - StringTokenizer st = new StringTokenizer(menuId, "."); - while (st.hasMoreTokens()) { - returnLevelTree[counter] = Integer.parseInt(st.nextToken()); - counter++; - } - } - return returnLevelTree; - } - - private void addTargetToAnchor(MenuItemDefinition menuItemDefinition) throws JspException { - if (menuItemDefinition.getTarget() != null && menuItemDefinition.getTarget().length() > 0) { - tagWriter.writeAttribute("target", menuItemDefinition.getTarget()); - } - } - - private void addTitleToAnchor(MenuItemDefinition menuItemDefinition) throws JspException { - String title = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getTitleKey(), menuItemDefinition.getTitle()); - if (title != null) { - tagWriter.writeAttribute("title", title); - } - } - - private void addOnClickToAnchor(MenuItemDefinition menuItemDefinition) throws JspException { - if (menuItemDefinition.getOnClick() != null && menuItemDefinition.getOnClick().length() > 0) { - StringBuffer onclickValue = new StringBuffer(); - onclickValue.append(" onclick=\"return "); - onclickValue.append(menuItemDefinition.getOnClick()).append("("); - onclickValue.append("'").append(menuItemDefinition.getBeanName()).append("'"); - onclickValue.append(", '").append(menuItemDefinition.getItemId()).append("'"); - onclickValue.append(", '").append(TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent())).append("'"); - onclickValue.append(", '").append(menuItemDefinition.getLink()).append("'"); - onclickValue.append(", ").append(menuItemDefinition.isFlagDisabled()); - onclickValue.append(", ").append(menuItemDefinition.isFlagRestricted()); - onclickValue.append(");"); - onclickValue.append("\""); - tagWriter.writeAttribute("onclick", onclickValue.toString()); - } - } - - /* (non-Javadoc) - * @see javax.servlet.jsp.tagext.TagSupport#release() - */ - @Override - public void release() { - this.menuId = null; - this.currentHeaderKey = null; - super.release(); - } - - -} +package it.mice.voila.runtime.springmvc.taglibs; + +import it.mice.voila.runtime.springmvc.bean.PathStackElement; +import it.mice.voila.runtime.springmvc.util.SpringMvcUtil; +import it.mice.voila.runtime.web.bean.MenuDefinition; +import it.mice.voila.runtime.web.bean.MenuItemDefinition; +import it.mice.voila.runtime.web.menu.MenuDefinitionFactory; +import it.mice.voila.runtime.web.menu.MenuFilterManager; + +import java.util.Enumeration; +import java.util.StringTokenizer; + +import javax.servlet.jsp.JspException; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.web.context.support.WebApplicationContextUtils; +import org.springframework.web.servlet.tags.form.AbstractFormTag; +import org.springframework.web.servlet.tags.form.TagWriter; + +public class MenuTag extends AbstractFormTag { + /** + * serial version UID + */ + private static final long serialVersionUID = 1365950626443575870L; + + private static final Log logger = LogFactory.getLog(MenuTag.class); + + private static final String MENU_TYPE_CSS_MAIN = "css_main"; + private static final String MENU_TYPE_EXTJS = "extjs"; + private static final String MENU_TYPE_CSS_LEFT = "css_left"; + private static final String MENU_TYPE_BS_LEFT = "bs_left"; + private static final String MENU_TYPE_BREADCRUMB = "breadCrumb"; + private static final String MENU_TYPE_BS_BREADCRUMB = "bs_breadCrumb"; + private static final String MENU_TYPE_MENUPAGE = "menuPage"; + public static final String SAVED_MENU_DEFINITION = MenuTag.class.getName() + "."; + + private String menuId; + private String menuName; + private String menuType = MENU_TYPE_CSS_MAIN; + private String menuFilterManagerBeanName = "menuFilterManager"; + private int minLevel = 0; + private int maxLevel = 9; + private boolean cacheMenu = true; + private boolean appendStack = false; + private String currentHeaderKey = null; + + private String hrefCurrentElement = "true"; + private String renderLastBreadcrumbSymbol = "true"; + + private TagWriter tagWriter; + + public boolean isCacheMenu() { + return cacheMenu; + } + + /** + * @return the appendStack + */ + public boolean isAppendStack() { + return appendStack; + } + + /** + * @param appendStack the appendStack to set + */ + public void setAppendStack(boolean appendStack) { + this.appendStack = appendStack; + } + + public String getCurrentHeaderKey() { + return currentHeaderKey; + } + + public void setCurrentHeaderKey(String currentHeaderKey) { + this.currentHeaderKey = currentHeaderKey; + } + + /** + * @param menuId the menuId to set + */ + public void setMenuId(String menuId) { + this.menuId = menuId; + } + + public void setCacheMenu(boolean cacheMenu) { + this.cacheMenu = cacheMenu; + } + + public String getMenuName() { + return menuName; + } + + public void setMenuName(String menuName) { + this.menuName = menuName; + } + + public String getMenuType() { + return menuType; + } + + public void setMenuType(String menuType) { + this.menuType = menuType; + } + + public String getMenuFilterManagerBeanName() { + return menuFilterManagerBeanName; + } + + public void setMenuFilterManagerBeanName(String menuFilterManagerBeanName) { + this.menuFilterManagerBeanName = menuFilterManagerBeanName; + } + + public int getMinLevel() { + return minLevel; + } + + public void setMinLevel(int minLevel) { + this.minLevel = minLevel; + } + + public int getMaxLevel() { + return maxLevel; + } + + public void setMaxLevel(int maxLevel) { + this.maxLevel = maxLevel; + } + + public String getHrefCurrentElement() { + return hrefCurrentElement; + } + + public void setHrefCurrentElement(String hrefCurrentElement) { + this.hrefCurrentElement = hrefCurrentElement; + } + + public String getRenderLastBreadcrumbSymbol() { + return renderLastBreadcrumbSymbol; + } + + public void setRenderLastBreadcrumbSymbol(String renderLastBreadcrumbSymbol) { + this.renderLastBreadcrumbSymbol = renderLastBreadcrumbSymbol; + } + + @Override + protected int writeTagContent(TagWriter tagWriter) throws JspException { + this.tagWriter = tagWriter; + + if (logger.isDebugEnabled()) + logger.debug("Start building menu type: " + menuType + "..."); + + MenuFilterManager menuFilterManager = + (MenuFilterManager)WebApplicationContextUtils + .getRequiredWebApplicationContext( + this.pageContext.getServletContext()) + .getBean(getMenuFilterManagerBeanName()); + + MenuDefinition filteredMenuDefinition; + MenuDefinition menuDefinition = menuFilterManager.getMenu(getMenuName()); + + filteredMenuDefinition = getMenuDefinitionFromCache(); + if (filteredMenuDefinition == null) { + filteredMenuDefinition = menuFilterManager.getFilteredMenu(getMenuName()); + setMenuDefinitionToCache(filteredMenuDefinition); + } + + if (menuType.equals(MENU_TYPE_CSS_MAIN)) { + drawCssMenuDefinitionTree(filteredMenuDefinition, 0, getSelectedLevelTree(), true); + } else if (menuType.equals(MENU_TYPE_EXTJS)) { + } else if (menuType.equals(MENU_TYPE_CSS_LEFT)) { + drawCssMenuDefinitionTree(filteredMenuDefinition, 0, getSelectedLevelTree(), true); + } else if (menuType.equals(MENU_TYPE_BS_LEFT)) { + drawBsLeftMenuDefinitionTree(filteredMenuDefinition, 0, getSelectedLevelTree(), true); + } else if (menuType.equals(MENU_TYPE_BREADCRUMB)) { + drawBreadCrumb(menuDefinition, 0, getSelectedLevelTree(), true); + if (appendStack) { + drawPathStack(); + } + } else if (menuType.equals(MENU_TYPE_BS_BREADCRUMB)) { + drawBsBreadCrumb(menuDefinition, 0, getSelectedLevelTree(), true); + if (appendStack) { + drawBsPathStack(); + } + } else if (menuType.equals(MENU_TYPE_MENUPAGE)) { + drawMainMenuPage(filteredMenuDefinition); + } else { + JspException e = + new JspException("Invalid menuType value: " + menuType + ". Must be one of the following values: dhtml, css_main, css_left."); + throw e; + } + return EVAL_BODY_INCLUDE; + } + + private MenuDefinition getMenuDefinitionFromCache() { + MenuDefinition result; + if (isCacheMenu()) { + result = (MenuDefinition)pageContext.getSession().getAttribute(SAVED_MENU_DEFINITION + "_" + getMenuName()); + } else { + result = (MenuDefinition)pageContext.getRequest().getAttribute(SAVED_MENU_DEFINITION + "_" + getMenuName()); + } + return result; + } + + private void setMenuDefinitionToCache(MenuDefinition filteredMenuDefinition) { + if (isCacheMenu()) { + pageContext.getSession().setAttribute(SAVED_MENU_DEFINITION + "_" + getMenuName(), filteredMenuDefinition); + } else { + pageContext.getRequest().setAttribute(SAVED_MENU_DEFINITION + "_" + getMenuName(), filteredMenuDefinition); + } + } + + private void drawMainMenuPage(MenuDefinition filteredMenuDefinition) throws JspException { + MenuItemDefinition foundMenuItemDefinition = getMenuItemDefinitionById(filteredMenuDefinition, getMenuId()); + if (foundMenuItemDefinition != null) { + tagWriter.startTag("h3"); + if (foundMenuItemDefinition.getTitle() != null || foundMenuItemDefinition.getTitleKey() != null) { + tagWriter.appendValue(TagUtils.getMessage(getRequestContext(), foundMenuItemDefinition.getTitleKey(), foundMenuItemDefinition.getTitle())); + } else { + tagWriter.appendValue(TagUtils.getMessage(getRequestContext(), foundMenuItemDefinition.getContentKey(), foundMenuItemDefinition.getContent())); + } + tagWriter.endTag(); + tagWriter.startTag("p"); + tagWriter.writeAttribute("class", "menuLevel0"); + addDescriptionToParagraph(foundMenuItemDefinition); + tagWriter.endTag(); + drawMenuPage(foundMenuItemDefinition.getMenuToShow(), 0); + } else { + drawMenuPage(filteredMenuDefinition, 0); + } + } + + private void drawMenuPage(MenuDefinition menuDefinition, int levelDeep) throws JspException { + if (levelDeep > maxLevel) { + return; + } + tagWriter.startTag("ul"); + for (int i = 0; i < menuDefinition.getMenuItems().length; i++) { + MenuItemDefinition menuItemDefinition = menuDefinition.getMenuItems()[i]; + String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); + tagWriter.startTag("li"); + StringBuffer classContent = new StringBuffer("menuLevel" + (levelDeep + 1)); + if (menuItemDefinition.isFlagDisabled()) { + classContent.append(" disabled"); + } + if (menuItemDefinition.isFlagRestricted()) { + classContent.append(" restricted"); + } + tagWriter.writeAttribute("class", classContent.toString()); + + if (menuItemDefinition.isFlagDisabled()) { + tagWriter.startTag("span"); + } else { + tagWriter.startTag("a"); + tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); + addTargetToAnchor(menuItemDefinition); + } + addTitleToAnchor(menuItemDefinition); + addOnClickToAnchor(menuItemDefinition); + tagWriter.appendValue(caption); + tagWriter.endTag(); + + if (levelDeep < maxLevel) { + tagWriter.startTag("p"); + tagWriter.writeAttribute("class", "menuLevel" + (levelDeep + 1)); + addDescriptionToParagraph(menuItemDefinition); + tagWriter.endTag(); + } + if (menuItemDefinition.getMenuToShow() != null) { + drawMenuPage(menuItemDefinition.getMenuToShow(), (levelDeep + 1)); + } + tagWriter.endTag(); + } + tagWriter.endTag(); + } + + private void addDescriptionToParagraph(MenuItemDefinition menuItemDefinition) throws JspException { + String description = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getDescriptionKey(), menuItemDefinition.getDescription()); + if (description != null) { + tagWriter.appendValue(description); + } + } + + private MenuItemDefinition getMenuItemDefinitionById(MenuDefinition menuDefinition, String menuId) { + MenuDefinition currentMenuDefinition = menuDefinition; + MenuItemDefinition selectedMenuItemDefinition = null; + for (int i=0; i maxLevel) { + return; + } + tagWriter.startTag("ul"); + if (levelDeep == 0) { + tagWriter.writeAttribute("id", menuType); + } + for (int i = 0; i < filteredMenuDefinition.getMenuItems().length; i++) { + boolean isElementSelected = false; + MenuItemDefinition menuItemDefinition = filteredMenuDefinition.getMenuItems()[i]; + int[] currentMenuItemId = convertToLevelTree(menuItemDefinition.getItemId()); + if (selectedLevelTree[levelDeep] == currentMenuItemId[levelDeep] && isParentSelected) { + if ((menuType.equals(MENU_TYPE_CSS_LEFT)) && (menuItemDefinition.getMenuToShow() == null)) { + // per il left menu se il menu item e' una foglia, va indicato come selezionato + // solo se la voce risulta effettivamente selezionata + if (menuItemDefinition.getItemId().equals(getMenuId())) { + isElementSelected = true; + } + } else { + isElementSelected = true; + } + } + if (levelDeep >= minLevel || (levelDeep < minLevel && isElementSelected)) { + String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); + StringBuffer classContent = new StringBuffer(); + if (isElementSelected) { + classContent.append(" selected"); + } + if (menuItemDefinition.isFlagDisabled()) { + classContent.append(" disabled"); + } + if (menuItemDefinition.isFlagRestricted()) { + classContent.append(" restricted"); + } + tagWriter.startTag("li"); + if (classContent.length() > 0) { + tagWriter.writeAttribute("class", classContent.toString().trim()); + } + if (menuItemDefinition.isFlagDisabled()) { + tagWriter.startTag("span"); + } else { + tagWriter.startTag("a"); + tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); + addTargetToAnchor(menuItemDefinition); + } + addTitleToAnchor(menuItemDefinition); + addOnClickToAnchor(menuItemDefinition); + tagWriter.appendValue(caption); + tagWriter.endTag(); + if (menuItemDefinition.getMenuToShow() != null) { + drawCssMenuDefinitionTree(menuItemDefinition.getMenuToShow(), + (levelDeep + 1), + selectedLevelTree, + isElementSelected); + } + tagWriter.endTag(); + } + } + tagWriter.endTag(); + } + + private void drawBsLeftMenuDefinitionTree(MenuDefinition filteredMenuDefinition, + int levelDeep, + int[] selectedLevelTree, + boolean isParentSelected) + throws JspException + { + if (levelDeep > maxLevel) { + return; + } + for (int i = 0; i < filteredMenuDefinition.getMenuItems().length; i++) { + boolean isElementSelected = false; + MenuItemDefinition menuItemDefinition = filteredMenuDefinition.getMenuItems()[i]; + int[] currentMenuItemId = convertToLevelTree(menuItemDefinition.getItemId()); + if (selectedLevelTree[levelDeep] == currentMenuItemId[levelDeep] && isParentSelected) { + if (menuItemDefinition.getMenuToShow() == null) { + // per il left menu se il menu item e' una foglia, va indicato come selezionato + // solo se la voce risulta effettivamente selezionata + if (menuItemDefinition.getItemId().equals(getMenuId())) { + isElementSelected = true; + } + } else { + isElementSelected = true; + } + } + if (levelDeep >= minLevel || (levelDeep < minLevel && isElementSelected)) { + String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); + StringBuffer classContent = new StringBuffer(); + if (menuItemDefinition.getMenuToShow() != null) { + classContent.append("treeview"); + } + if (isElementSelected) { + classContent.append(" active"); + } + if (menuItemDefinition.isFlagDisabled()) { + classContent.append(" disabled"); + } + if (menuItemDefinition.isFlagRestricted()) { + classContent.append(" restricted"); + } + tagWriter.startTag("li"); + if (classContent.length() > 0) { + tagWriter.writeAttribute("class", classContent.toString().trim()); + } + if (menuItemDefinition.isFlagDisabled()) { + tagWriter.startTag("span"); + } else { + tagWriter.startTag("a"); + tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); + if (menuItemDefinition.getMenuToShow() != null) { + tagWriter.writeAttribute("class", "noWaitPopup"); + } + addTargetToAnchor(menuItemDefinition); + } + addTitleToAnchor(menuItemDefinition); + addOnClickToAnchor(menuItemDefinition); + + tagWriter.startTag("i"); + tagWriter.writeAttribute("class", "fa " + (menuItemDefinition.getMenuToShow() == null ? "fa-angle-double-right" : "fa-circle-o")); + tagWriter.endTag(true); // + tagWriter.startTag("span"); + + tagWriter.appendValue(caption); + + tagWriter.endTag(); // + + if (menuItemDefinition.getMenuToShow() != null) { + // + tagWriter.startTag("i"); + tagWriter.writeAttribute("class", "fa fa-angle-left pull-right"); + tagWriter.endTag(true); // + + tagWriter.endTag(); // or + + //
    + tagWriter.startTag("ul"); + tagWriter.writeAttribute("class", "treeview-menu"); + drawBsLeftMenuDefinitionTree(menuItemDefinition.getMenuToShow(), + (levelDeep + 1), + selectedLevelTree, + isElementSelected); + tagWriter.endTag(); //
+ } else { + tagWriter.endTag(); // or + } + tagWriter.endTag(); // + } + } + } + + private void drawBreadCrumb(MenuDefinition menuDefinition, int levelDeep, int[] selectedLevelTree, boolean isParentSelected) throws JspException { + if (levelDeep > maxLevel) { + return; + } + for (int i = 0; i < menuDefinition.getMenuItems().length; i++) { + boolean isElementSelected; + if (selectedLevelTree[levelDeep] == (i + 1) && isParentSelected) { + MenuItemDefinition menuItemDefinition = menuDefinition.getMenuItems()[i]; + String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); + isElementSelected = true; + tagWriter.startTag("a"); + tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); + addTargetToAnchor(menuItemDefinition); + addTitleToAnchor(menuItemDefinition); + addOnClickToAnchor(menuItemDefinition); + if (menuItemDefinition.getMenuToShow() == null) { + tagWriter.writeAttribute("class", "selected"); + } + tagWriter.appendValue(caption); + tagWriter.endTag(); + if (menuItemDefinition.getMenuToShow() != null || evaluateBoolean("renderLastBreadcrumbSymbol", getRenderLastBreadcrumbSymbol())) { + TagUtils.safeWrite(pageContext, " > "); + } + if (menuItemDefinition.getMenuToShow() != null) { + drawBreadCrumb(menuItemDefinition.getMenuToShow(), (levelDeep + 1), selectedLevelTree, isElementSelected); + } + } + } + } + + private void drawPathStack() throws JspException { + Enumeration ePathStack = SpringMvcUtil.getStack().elements(); + while (ePathStack.hasMoreElements()) { + PathStackElement aPathStackElement = ePathStack.nextElement(); + + String caption = TagUtils.getMessage(getRequestContext(), aPathStackElement.getHeaderKey(), aPathStackElement.getHeaderKey()); + tagWriter.startTag("a"); + tagWriter.writeAttribute("href", SpringMvcUtil.getServerBaseUrl() + aPathStackElement.getPath()); + tagWriter.appendValue(caption); + tagWriter.endTag(); + TagUtils.safeWrite(pageContext, " > "); + } + } + + + private void drawBsBreadCrumb(MenuDefinition menuDefinition, int levelDeep, int[] selectedLevelTree, boolean isParentSelected) throws JspException { + if (levelDeep > maxLevel) { + return; + } + for (int i = 0; i < menuDefinition.getMenuItems().length; i++) { + if (selectedLevelTree[levelDeep] == (i + 1) && isParentSelected) { + MenuItemDefinition menuItemDefinition = menuDefinition.getMenuItems()[i]; + String caption = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent()); + tagWriter.startTag("li"); + tagWriter.startTag("a"); + tagWriter.writeAttribute("href", prepareLink(menuItemDefinition.getLink())); + addTargetToAnchor(menuItemDefinition); + addTitleToAnchor(menuItemDefinition); + addOnClickToAnchor(menuItemDefinition); + tagWriter.appendValue(caption); + tagWriter.endTag(); + tagWriter.endTag(); + } + } + } + + private void drawBsPathStack() throws JspException { + Enumeration ePathStack = SpringMvcUtil.getStack().elements(); + while (ePathStack.hasMoreElements()) { + PathStackElement aPathStackElement = ePathStack.nextElement(); + + if (getCurrentHeaderKey() != null && !getCurrentHeaderKey().equals(aPathStackElement.getHeaderKey())) { + String caption = TagUtils.getMessage(getRequestContext(), aPathStackElement.getHeaderKey(), aPathStackElement.getHeaderKey()); + tagWriter.startTag("li"); + tagWriter.startTag("a"); + tagWriter.writeAttribute("href", aPathStackElement.getPath()); + tagWriter.appendValue(caption); + tagWriter.endTag(); + tagWriter.endTag(); + } + } + } + + private String prepareLink(String link) { + if (!StringUtils.isEmpty(link) && link.startsWith("http")) { + return link; + } + return getRequestContext().getContextUrl(link); + } + + private int[] getSelectedLevelTree() { + String menuId = getMenuId(); + int[] selectedLevelTree = convertToLevelTree(menuId); + return selectedLevelTree; + } + + private String getMenuId() { + if (this.menuId != null) { + return this.menuId; + } + String menuId = pageContext.getRequest().getParameter(MenuDefinitionFactory.SELECTED_MENU_ID); + if (menuId == null) { + menuId = (String) pageContext.getSession().getAttribute(MenuDefinitionFactory.SELECTED_MENU_ID); + } else { + pageContext.getSession().setAttribute(MenuDefinitionFactory.SELECTED_MENU_ID, menuId); + } + return menuId; + } + + private int[] convertToLevelTree(String menuId) { + int[] returnLevelTree = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + if (menuId != null) { + int counter = 0; + StringTokenizer st = new StringTokenizer(menuId, "."); + while (st.hasMoreTokens()) { + returnLevelTree[counter] = Integer.parseInt(st.nextToken()); + counter++; + } + } + return returnLevelTree; + } + + private void addTargetToAnchor(MenuItemDefinition menuItemDefinition) throws JspException { + if (menuItemDefinition.getTarget() != null && menuItemDefinition.getTarget().length() > 0) { + tagWriter.writeAttribute("target", menuItemDefinition.getTarget()); + } + } + + private void addTitleToAnchor(MenuItemDefinition menuItemDefinition) throws JspException { + String title = TagUtils.getMessage(getRequestContext(), menuItemDefinition.getTitleKey(), menuItemDefinition.getTitle()); + if (title != null) { + tagWriter.writeAttribute("title", title); + } + } + + private void addOnClickToAnchor(MenuItemDefinition menuItemDefinition) throws JspException { + if (menuItemDefinition.getOnClick() != null && menuItemDefinition.getOnClick().length() > 0) { + StringBuffer onclickValue = new StringBuffer(); + onclickValue.append(" onclick=\"return "); + onclickValue.append(menuItemDefinition.getOnClick()).append("("); + onclickValue.append("'").append(menuItemDefinition.getBeanName()).append("'"); + onclickValue.append(", '").append(menuItemDefinition.getItemId()).append("'"); + onclickValue.append(", '").append(TagUtils.getMessage(getRequestContext(), menuItemDefinition.getContentKey(), menuItemDefinition.getContent())).append("'"); + onclickValue.append(", '").append(menuItemDefinition.getLink()).append("'"); + onclickValue.append(", ").append(menuItemDefinition.isFlagDisabled()); + onclickValue.append(", ").append(menuItemDefinition.isFlagRestricted()); + onclickValue.append(");"); + onclickValue.append("\""); + tagWriter.writeAttribute("onclick", onclickValue.toString()); + } + } + + /* (non-Javadoc) + * @see javax.servlet.jsp.tagext.TagSupport#release() + */ + @Override + public void release() { + this.menuId = null; + this.currentHeaderKey = null; + super.release(); + } + + +} diff --git a/voila-runtime-style-responsive/src/main/resources/META-INF/js/picedit.js b/voila-runtime-style-responsive/src/main/resources/META-INF/js/picedit.js index e5bad1e9..d88a0049 100644 --- a/voila-runtime-style-responsive/src/main/resources/META-INF/js/picedit.js +++ b/voila-runtime-style-responsive/src/main/resources/META-INF/js/picedit.js @@ -35,7 +35,7 @@ aspectRatio : true, // Preserve aspect ratio defaultImage : false, // Default image to be used with the plugin boxClass : '', - readOnly : false, // read only + readOnly : false // read only }; // The actual plugin constructor diff --git a/voila-runtime-style-responsive/src/main/resources/META-INF/js/voila-general.js b/voila-runtime-style-responsive/src/main/resources/META-INF/js/voila-general.js index 5a735c22..eda27863 100644 --- a/voila-runtime-style-responsive/src/main/resources/META-INF/js/voila-general.js +++ b/voila-runtime-style-responsive/src/main/resources/META-INF/js/voila-general.js @@ -1,1521 +1,1521 @@ -var skipValidation = false; -var skipWaitPopup = false; - -$.extend($.fn.autoNumeric.defaults, { - aSep: '.', - aDec: ',' -}); - -function showWaitPopup() { - return true; -} - -function doShowWaitPopup() { - $("#waitModal").modal("show"); - return true; -} - -function hidePopWin() { - $("#waitModal").modal("hide"); -} - -function showDojoAlertDialog(html, level) { - if (level == "info") { - //Non emettiamo il popup nel caso di semplici segnalazioni - return; - } - $("#error-modal-body").append($(html)); - var errorModal = $("#errorModal"); - errorModal.find(".modal-header").addClass(level); - //Emettiamo un popup che si toglie automaticamente dopo 2 secondi nel caso di warning, altrimenti lo lasciamo in caso di errori bloccanti. - if (level == "warning") { - errorModal.on('show.bs.modal', function () { - clearTimeout(errorModal.data('hideInteval')) - var id = setTimeout(function(){ - errorModal.modal('hide'); - }, 2000); - errorModal.data('hideInteval', id); - }) - } - errorModal.modal("show"); -} - -function $n(myid) { - var normalizedId = "#" + myid.replace( /(:|\.|\[|\])/g, "\\$1" ); - var result = $(normalizedId); - return result; -} - -$(function() { - addWaitPopupOnAllLinks(); - removeEmptyButtonBars(); - addCalculators(); - - $.validator.methods.date = function (value, element) { -// return this.optional(element) || $.datepicker.parseDate('dd/mm/yy', value); - return this.optional(element) || true; - } - - //Datemask dd/mm/yyyy - $("input.date").inputmask("dd/mm/yyyy", {"placeholder": "gg/mm/aaaa"}); - //$('input.number').autoNumeric('init', {aSign:'', pSign:'s' }); - - //Date range picker - $("input[readonly!='readonly'].date").datepicker({ - format: "dd/mm/yyyy", - language: "it", - autoclose: true - }); - - //Datemask dd/mm/yyyy - $("input.time").inputmask("99:99", {"placeholder": "hh:mm"}); - - $("button.cancel").click(function() { - skipValidation = true; - return true; - }); - - //Timepicker -// $(".timepicker").timepicker({ -// showInputs: false -// }); - - validateForm(); -}); - -$(document).ready(function() { -// Commented for performance reasons on large pages!!!!!!!!!!!!!!! -// $(':not(label)[title!=""]').tooltip({ -// placement: "auto", -// html: false, -// delay: { "show": 600, "hide": 80 } -// }); - - if (window.GLOBAL_JUMP_TO_ID && window.GLOBAL_JUMP_TO_ID != '') { - jumpTo(); - } else { - formFocus(); - } -}); - -function hideIconImageBroken(image) { - if (window.GLOBAL_CONTEXT_PATH) { - image.src = window.GLOBAL_CONTEXT_PATH + "/resources/img/default_image_icon.png"; - } else { - console.error("window.GLOBAL_CONTEXT_PATH is not defined"); - } - return true; -} - -function hideBannerImageBroken(image) { - if (window.GLOBAL_CONTEXT_PATH) { - image.src = window.GLOBAL_CONTEXT_PATH + "/resources/img/default_image_banner.png"; - } else { - console.error("window.GLOBAL_CONTEXT_PATH is not defined"); - } - return true; -} - -//FIXME -function addCalculators() { - if ($.calculator) { - $('.form-control.value, .form-control.currency').calculator({showOn: 'operator'}); - } -} - -function makeTooltip(id, html) { - $n(id).tooltip({ - html: true, - title: html, - placement: "top", - delay: { "show": 600, "hide": 80 } - }); - $n(id).removeAttr("title"); -} - -function initMapForDetail(latitude, longitude, canvas) { - if (latitude != '' && longitude != '') { - var myLatLng = new google.maps.LatLng(parseFloat(latitude), parseFloat(longitude)); - var mapCanvas = document.getElementById(canvas); - var mapOptions = { - center: myLatLng, - zoom: 12, - scrollwheel: false, - mapTypeId: google.maps.MapTypeId.ROADMAP - } - var map = new google.maps.Map(mapCanvas, mapOptions) - var iconBase = 'https://maps.google.com/mapfiles/kml/pushpin/'; - var marker = new google.maps.Marker({ - position: myLatLng, - map: map, - animation: google.maps.Animation.DROP, - icon: { - size: new google.maps.Size(32, 32), - scaledSize: new google.maps.Size(32, 32), - url: iconBase + 'red-pushpin.png' - }, - }); - } -} - -function initMapForList(canvas, list) { - //var myLatLng = new google.maps.LatLng(parseFloat(latitude), parseFloat(longitude)); - var mapCanvas = document.getElementById(canvas); - var mapOptions = { - zoom: 12, - scrollwheel: false, - mapTypeId: google.maps.MapTypeId.ROADMAP - } - var map = new google.maps.Map(mapCanvas, mapOptions) - var iconBase = 'https://maps.google.com/mapfiles/kml/pushpin/'; - - var bound = new google.maps.LatLngBounds(); - for (var i = 0; i < list.length; i++) { - var item = list[i]; - if (item.x != '' && item.y != '') { - var myLatLng = new google.maps.LatLng(parseFloat(item.x), parseFloat(item.y)); - bound.extend(myLatLng); - var marker = new google.maps.Marker({ - position: myLatLng, - map: map, - animation: google.maps.Animation.DROP, - url: 'view/' + item.objectKey + '?newFlow=true', - title: item.objectTitle, - icon: { - size: new google.maps.Size(32, 32), - scaledSize: new google.maps.Size(32, 32), - url: iconBase + 'red-pushpin.png' - }, - }); - google.maps.event.addListener(marker, 'click', function() { - window.location.href = this.url; - }); - } - } - map.fitBounds(bound); -} - -function jumpTo() { - var divid = $n(window.GLOBAL_JUMP_TO_ID); - if (divid.length > 0) { - $('html, body').animate({ scrollTop: divid.offset().top - 200}, 500); - if (divid.focus) { - divid.focus(); - } else { - } - } - return false; -} - -function formFocus() { - if (window.GLOBAL_SKIP_FORM_FOCUS) { - return; - } - //TODO verificare meglio - //$('#form :input.form-control:not([readonly]):visible:enabled:first').focus(); -} - -//Add onclick handlers to 'a' elements excluding of class noWaitPopup, -//for automatic wait poup div. -function addWaitPopupOnAllLinks() { - $("a:not(.noWaitPopup)").each(function() { - if (this.onclick == null) { - //href with 6578706f7274=1 means that are export links of display tag library. - if (this.href != undefined - && this.href.indexOf("javascript:") == -1 - && this.href.indexOf("#") == -1 - && this.href.indexOf("6578706f7274=1") == -1) { - this.onclick = function() { - doShowWaitPopup(); - return true; - } - } - } - }); -} - -function removeEmptyButtonBars() { - if (window.GLOBAL_SKIP_REMOVE_EMPTY_BUTTON_BARS) { - return; - } - $('ul.buttonBar:not(:has(*))').hide(); -} - -function switchFrameLayout(idFrame, forceSwitch) { - if (window.GLOBAL_SKIP_SWITCH_FRAME_LAYOUT && !forceSwitch) { - return; - } - var frameDiv = $n('IF' + idFrame); - $("[data-widget='collapse']", frameDiv).trigger( "click" ); -} - -var validationRules = {}; -function validateForm() { - jQuery.validator.addMethod("greaterThan", function(value, element, params) { - var otherVal = $n(params[0]).val(); - if (value != "" && otherVal != "") { - var endDate = moment(value, "DD/MM/YYYY").toDate(); - var startDate = moment(otherVal, "DD/MM/YYYY").toDate(); - return endDate > startDate; - } - return true; - }, '{1} deve essere maggiore di {2}.'); - - jQuery.validator.addMethod("greaterOrEqualThan", function(value, element, params) { - var otherVal = $n(params[0]).val(); - if (value != "" && otherVal != "") { - var endDate = moment(value, "DD/MM/YYYY").toDate(); - var startDate = moment(otherVal, "DD/MM/YYYY").toDate(); - return endDate >= startDate; - } - return true; - }, '{1} deve essere maggiore o uguale a {2}.'); - - $("#form").validate({ - onkeyup: function(element) { - }, - onsubmit: function(element) { - return !skipValidation; - }, - rules : validationRules, - highlight : function(element) { - $(element).addClass('error'); - $("label[for='" + element.id + "']").addClass('error'); - $n(element.id + "-error").remove(); -// $(element).closest('.form-group').find(".form-control, .control-label").addClass('error'); - }, - unhighlight : function(element) { - $(element).removeClass('error'); - $("label[for='" + element.id + "']").removeClass('error'); - $n(element.id + "-error").remove(); -// $(element).closest('.form-group').find(".form-control, .control-label").removeClass('error'); - }, - submitHandler: function(form) { - resetInputNumbers(); - return true; - }, - invalidHandler: function(event, validator) { - if (skipValidation) { - event.target.submit(); - } - }, - errorElement : 'span', - errorClass : 'help-block error', - errorPlacement : function(error, element) { - if (element.parent('.input-group').length) { - error.insertAfter(element.parent()); - } else { - error.insertAfter(element); - } - } - }); -} - -function resetInputNumbers() { - $('input.number').each(function(i){ - var self = $(this); - try{ - var v = self.autoNumeric('get'); - self.autoNumeric('destroy'); - self.val(v); - }catch(err){ - } - }); - doShowWaitPopup(); -} - -var currentPopupDialog; -var currentPopupDialogArg; -var gReturnFunc; -function openPopupDialog(popupDialogArg, width, height, retFunc) -{ - //Durante la composizione dell'URL verifica che i parametri siano valorizzati - tempSrc = popupDialogArg.url ; - if( popupDialogArg.parameter != null){ - separatorParam = "?" ; - if( tempSrc.indexOf('?') > 0 ) - separatorParam = "&" ; - tempSrc = tempSrc + separatorParam + popupDialogArg.parameter; - } - - if (currentPopupDialog) { - currentPopupDialog.close(); - } - - var content = "