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.taglib.aui.base.BaseNavTag;
030
031 import javax.portlet.PortletResponse;
032
033 import javax.servlet.http.HttpServletRequest;
034 import javax.servlet.jsp.JspException;
035 import javax.servlet.jsp.tagext.BodyTag;
036
037
043 public class NavTag extends BaseNavTag implements BodyTag {
044
045 @Override
046 public int doStartTag() throws JspException {
047 NavBarTag navBarTag = (NavBarTag)findAncestorWithClass(
048 this, NavBarTag.class);
049
050 if ((navBarTag != null) &&
051 (!_calledCollapsibleSetter || getCollapsible())) {
052
053 setCollapsible(true);
054
055 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
056 WebKeys.THEME_DISPLAY);
057
058 StringBundler sb = navBarTag.getResponsiveButtonsSB();
059
060 sb.append("<a class=\"btn navbar-btn navbar-toggle");
061
062 String cssClass = getCssClass();
063
064 if (Validator.isNotNull(cssClass)) {
065 String[] cssClassParts = StringUtil.split(
066 cssClass, CharPool.SPACE);
067
068 for (int i = 0; i < cssClassParts.length; i++) {
069 sb.append(StringPool.SPACE);
070 sb.append(cssClassParts[i]);
071 sb.append("-btn");
072 }
073 }
074
075 if (_hasSearchResults()) {
076 sb.append(" hide");
077 }
078
079 sb.append("\" id=\"");
080 sb.append(_getNamespacedId());
081 sb.append("NavbarBtn\" ");
082 sb.append("data-navId=\"");
083 sb.append(_getNamespacedId());
084 sb.append("\" tabindex=\"0\">");
085
086 String icon = getIcon();
087
088 if (Validator.isNull(icon)) {
089 sb.append("<span class=\"icon-bar\"></span>");
090 sb.append("<span class=\"icon-bar\"></span>");
091 sb.append("<span class=\"icon-bar\"></span>");
092 }
093 else if (icon.equals("user") && themeDisplay.isSignedIn()) {
094 try {
095 User user = themeDisplay.getUser();
096
097 sb.append("<img alt=\"");
098 sb.append(LanguageUtil.get(request, "my-account"));
099 sb.append("\" class=\"user-avatar-image\" ");
100 sb.append("src=\"");
101 sb.append(user.getPortraitURL(themeDisplay));
102 sb.append("\">");
103 }
104 catch (Exception e) {
105 throw new JspException(e);
106 }
107 }
108 else {
109 sb.append("<i class=\"icon-");
110 sb.append(icon);
111 sb.append("\"></i>");
112 }
113
114 sb.append("</a>");
115 }
116
117 return super.doStartTag();
118 }
119
120 @Override
121 public void setCollapsible(boolean collapsible) {
122 super.setCollapsible(collapsible);
123
124 _calledCollapsibleSetter = true;
125 }
126
127 @Override
128 protected void cleanUp() {
129 super.cleanUp();
130
131 _calledCollapsibleSetter = false;
132 _namespacedId = null;
133 }
134
135 @Override
136 protected int processStartTag() throws Exception {
137 return EVAL_BODY_BUFFERED;
138 }
139
140 @Override
141 protected void setAttributes(HttpServletRequest request) {
142 super.setAttributes(request);
143
144 setNamespacedAttribute(request, "id", _getNamespacedId());
145 }
146
147 private String _getNamespacedId() {
148 if (Validator.isNotNull(_namespacedId)) {
149 return _namespacedId;
150 }
151
152 _namespacedId = getId();
153
154 if (Validator.isNull(_namespacedId)) {
155 _namespacedId = StringUtil.randomId();
156 }
157
158 HttpServletRequest request =
159 (HttpServletRequest)pageContext.getRequest();
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 }