001
014
015 package com.liferay.taglib.aui;
016
017 import com.liferay.portal.kernel.dao.search.DisplayTerms;
018 import com.liferay.portal.kernel.dao.search.SearchContainer;
019 import com.liferay.portal.kernel.language.LanguageUtil;
020 import com.liferay.portal.kernel.util.CharPool;
021 import com.liferay.portal.kernel.util.JavaConstants;
022 import com.liferay.portal.kernel.util.StringBundler;
023 import com.liferay.portal.kernel.util.StringPool;
024 import com.liferay.portal.kernel.util.StringUtil;
025 import com.liferay.portal.kernel.util.Validator;
026 import com.liferay.portal.kernel.util.WebKeys;
027 import com.liferay.portal.model.User;
028 import com.liferay.portal.theme.ThemeDisplay;
029 import com.liferay.portal.util.PortalUtil;
030 import com.liferay.taglib.aui.base.BaseNavTag;
031
032 import javax.portlet.PortletResponse;
033
034 import javax.servlet.http.HttpServletRequest;
035 import javax.servlet.jsp.JspException;
036 import javax.servlet.jsp.tagext.BodyTag;
037
038
044 public class NavTag extends BaseNavTag implements BodyTag {
045
046 @Override
047 public int doStartTag() throws JspException {
048 NavBarTag navBarTag = (NavBarTag)findAncestorWithClass(
049 this, NavBarTag.class);
050
051 if ((navBarTag != null) &&
052 (!_calledCollapsibleSetter || getCollapsible())) {
053
054 setCollapsible(true);
055
056 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
057 WebKeys.THEME_DISPLAY);
058
059 StringBundler sb = navBarTag.getResponsiveButtonsSB();
060
061 sb.append("<a class=\"btn navbar-btn navbar-toggle");
062
063 String cssClass = getCssClass();
064
065 if (Validator.isNotNull(cssClass)) {
066 String[] cssClassParts = StringUtil.split(
067 cssClass, CharPool.SPACE);
068
069 for (int i = 0; i < cssClassParts.length; i++) {
070 sb.append(StringPool.SPACE);
071 sb.append(cssClassParts[i]);
072 sb.append("-btn");
073 }
074 }
075
076 if (_hasSearchResults()) {
077 sb.append(" hide");
078 }
079
080 sb.append("\" id=\"");
081 sb.append(_getNamespacedId());
082 sb.append("NavbarBtn\" ");
083 sb.append("data-navId=\"");
084 sb.append(_getNamespacedId());
085 sb.append("\" tabindex=\"0\">");
086
087 String icon = getIcon();
088
089 if (Validator.isNull(icon)) {
090 sb.append("<i class=\"icon-reorder\"></i>");
091 }
092 else if (icon.equals("user") && themeDisplay.isSignedIn()) {
093 try {
094 User user = themeDisplay.getUser();
095
096 sb.append("<img alt=\"");
097 sb.append(LanguageUtil.get(request, "my-account"));
098 sb.append("\" class=\"user-avatar-image\" ");
099 sb.append("src=\"");
100 sb.append(user.getPortraitURL(themeDisplay));
101 sb.append("\">");
102 }
103 catch (Exception e) {
104 throw new JspException(e);
105 }
106 }
107 else {
108 sb.append("<i class=\"icon-");
109 sb.append(icon);
110 sb.append("\"></i>");
111 }
112
113 sb.append("</a>");
114 }
115
116 return super.doStartTag();
117 }
118
119 @Override
120 public void setCollapsible(boolean collapsible) {
121 super.setCollapsible(collapsible);
122
123 _calledCollapsibleSetter = true;
124 }
125
126 @Override
127 protected void cleanUp() {
128 super.cleanUp();
129
130 _calledCollapsibleSetter = false;
131 _namespacedId = null;
132 }
133
134 @Override
135 protected int processStartTag() throws Exception {
136 return EVAL_BODY_BUFFERED;
137 }
138
139 @Override
140 protected void setAttributes(HttpServletRequest request) {
141 super.setAttributes(request);
142
143 setNamespacedAttribute(request, "id", _getNamespacedId());
144 }
145
146 private String _getNamespacedId() {
147 if (Validator.isNotNull(_namespacedId)) {
148 return _namespacedId;
149 }
150
151 _namespacedId = getId();
152
153 HttpServletRequest request =
154 (HttpServletRequest)pageContext.getRequest();
155
156 if (Validator.isNull(_namespacedId)) {
157 _namespacedId = PortalUtil.getUniqueElementId(
158 request, StringPool.BLANK, AUIUtil.normalizeId("navTag"));
159 }
160
161 PortletResponse portletResponse = (PortletResponse)request.getAttribute(
162 JavaConstants.JAVAX_PORTLET_RESPONSE);
163
164 if ((portletResponse != null) && getUseNamespace()) {
165 _namespacedId = portletResponse.getNamespace() + _namespacedId;
166 }
167
168 return _namespacedId;
169 }
170
171 private boolean _hasSearchResults() {
172 SearchContainer<?> searchContainer = getSearchContainer();
173
174 if (searchContainer == null) {
175 return false;
176 }
177
178 DisplayTerms displayTerms = searchContainer.getDisplayTerms();
179
180 String keywords = displayTerms.getKeywords();
181
182 if (displayTerms.isAdvancedSearch() ||
183 !keywords.equals(StringPool.BLANK)) {
184
185 return true;
186 }
187
188 return false;
189 }
190
191 private boolean _calledCollapsibleSetter;
192 private String _namespacedId;
193
194 }