/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.taglib.aui; import com.liferay.portal.kernel.dao.search.DisplayTerms; import com.liferay.portal.kernel.dao.search.SearchContainer; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.CharPool; import com.liferay.portal.kernel.util.JavaConstants; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.taglib.aui.base.BaseNavTag; import com.liferay.taglib.util.TagResourceBundleUtil; import java.util.ResourceBundle; import javax.portlet.PortletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTag; /** * @author Eduardo Lundgren * @author Bruno Basto * @author Nathan Cavanaugh * @author Julio Camarero */ public class NavTag extends BaseNavTag implements BodyTag { @Override public int doStartTag() throws JspException { NavBarTag navBarTag = (NavBarTag)findAncestorWithClass( this, NavBarTag.class); if ((navBarTag != null) && (!_calledCollapsibleSetter || getCollapsible())) { setCollapsible(true); navBarTag.setDataTarget(_getNamespacedId()); ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute( WebKeys.THEME_DISPLAY); StringBundler sb = navBarTag.getResponsiveButtonsSB(); sb.append("<a class=\"btn navbar-btn navbar-toggle"); String cssClass = getCssClass(); if (Validator.isNotNull(cssClass)) { String[] cssClassParts = StringUtil.split( cssClass, CharPool.SPACE); for (int i = 0; i < cssClassParts.length; i++) { sb.append(StringPool.SPACE); sb.append(cssClassParts[i]); sb.append("-btn"); } } if (_hasSearchResults()) { sb.append(" hide"); } sb.append("\" id=\""); sb.append(_getNamespacedId()); sb.append("NavbarBtn\" data-navId=\""); sb.append(_getNamespacedId()); sb.append("\" tabindex=\"0\">"); String icon = getIcon(); if (Validator.isNull(icon)) { sb.append("<i class=\"icon-reorder\"></i>"); } else if (icon.equals("user") && themeDisplay.isSignedIn()) { try { sb.append("<img alt=\""); ResourceBundle resourceBundle = TagResourceBundleUtil.getResourceBundle(pageContext); sb.append(LanguageUtil.get(resourceBundle, "my-account")); sb.append("\" class=\"user-avatar-image\" src=\""); User user = themeDisplay.getUser(); sb.append(user.getPortraitURL(themeDisplay)); sb.append("\">"); } catch (Exception e) { throw new JspException(e); } } else { sb.append("<i class=\"icon-"); sb.append(icon); sb.append("\"></i>"); } sb.append("</a>"); } return super.doStartTag(); } @Override public void setCollapsible(boolean collapsible) { super.setCollapsible(collapsible); _calledCollapsibleSetter = true; } @Override protected void cleanUp() { super.cleanUp(); _calledCollapsibleSetter = false; _namespacedId = null; } protected String getMarkupView() { String markupView = StringPool.BLANK; NavBarTag navBarTag = (NavBarTag)findAncestorWithClass( this, NavBarTag.class); if (navBarTag != null) { markupView = navBarTag.getMarkupView(); } return markupView; } @Override protected String getPage() { if (Validator.isNotNull(getMarkupView())) { return "/html/taglib/aui/nav/" + getMarkupView() + "/page.jsp"; } return "/html/taglib/aui/nav/page.jsp"; } @Override protected int processStartTag() throws Exception { return EVAL_BODY_BUFFERED; } @Override protected void setAttributes(HttpServletRequest request) { super.setAttributes(request); setNamespacedAttribute(request, "id", _getNamespacedId()); } private String _getNamespacedId() { if (Validator.isNotNull(_namespacedId)) { return _namespacedId; } _namespacedId = getId(); HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); if (Validator.isNull(_namespacedId)) { _namespacedId = PortalUtil.getUniqueElementId( request, StringPool.BLANK, AUIUtil.normalizeId("navTag")); } PortletResponse portletResponse = (PortletResponse)request.getAttribute( JavaConstants.JAVAX_PORTLET_RESPONSE); if ((portletResponse != null) && getUseNamespace()) { _namespacedId = portletResponse.getNamespace() + _namespacedId; } return _namespacedId; } private boolean _hasSearchResults() { SearchContainer<?> searchContainer = getSearchContainer(); if (searchContainer == null) { return false; } DisplayTerms displayTerms = searchContainer.getDisplayTerms(); String keywords = displayTerms.getKeywords(); if (displayTerms.isAdvancedSearch() || !keywords.equals(StringPool.BLANK)) { return true; } return false; } private boolean _calledCollapsibleSetter; private String _namespacedId; }