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 import com.liferay.taglib.util.TagResourceBundleUtil;
032
033 import java.util.ResourceBundle;
034
035 import javax.portlet.PortletResponse;
036
037 import javax.servlet.http.HttpServletRequest;
038 import javax.servlet.jsp.JspException;
039 import javax.servlet.jsp.tagext.BodyTag;
040
041
047 public class NavTag extends BaseNavTag implements BodyTag {
048
049 @Override
050 public int doStartTag() throws JspException {
051 NavBarTag navBarTag = (NavBarTag)findAncestorWithClass(
052 this, NavBarTag.class);
053
054 if ((navBarTag != null) &&
055 (!_calledCollapsibleSetter || getCollapsible())) {
056
057 setCollapsible(true);
058
059 navBarTag.setDataTarget(_getNamespacedId());
060
061 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
062 WebKeys.THEME_DISPLAY);
063
064 StringBundler sb = navBarTag.getResponsiveButtonsSB();
065
066 sb.append("<a class=\"btn navbar-btn navbar-toggle");
067
068 String cssClass = getCssClass();
069
070 if (Validator.isNotNull(cssClass)) {
071 String[] cssClassParts = StringUtil.split(
072 cssClass, CharPool.SPACE);
073
074 for (int i = 0; i < cssClassParts.length; i++) {
075 sb.append(StringPool.SPACE);
076 sb.append(cssClassParts[i]);
077 sb.append("-btn");
078 }
079 }
080
081 if (_hasSearchResults()) {
082 sb.append(" hide");
083 }
084
085 sb.append("\" id=\"");
086 sb.append(_getNamespacedId());
087 sb.append("NavbarBtn\" ");
088 sb.append("data-navId=\"");
089 sb.append(_getNamespacedId());
090 sb.append("\" tabindex=\"0\">");
091
092 String icon = getIcon();
093
094 if (Validator.isNull(icon)) {
095 sb.append("<i class=\"icon-reorder\"></i>");
096 }
097 else if (icon.equals("user") && themeDisplay.isSignedIn()) {
098 try {
099 sb.append("<img alt=\"");
100
101 ResourceBundle resourceBundle =
102 TagResourceBundleUtil.getResourceBundle(pageContext);
103
104 sb.append(LanguageUtil.get(resourceBundle, "my-account"));
105
106 sb.append("\" class=\"user-avatar-image\" ");
107 sb.append("src=\"");
108
109 User user = themeDisplay.getUser();
110
111 sb.append(user.getPortraitURL(themeDisplay));
112
113 sb.append("\">");
114 }
115 catch (Exception e) {
116 throw new JspException(e);
117 }
118 }
119 else {
120 sb.append("<i class=\"icon-");
121 sb.append(icon);
122 sb.append("\"></i>");
123 }
124
125 sb.append("</a>");
126 }
127
128 return super.doStartTag();
129 }
130
131 @Override
132 public void setCollapsible(boolean collapsible) {
133 super.setCollapsible(collapsible);
134
135 _calledCollapsibleSetter = true;
136 }
137
138 @Override
139 protected void cleanUp() {
140 super.cleanUp();
141
142 _calledCollapsibleSetter = false;
143 _namespacedId = null;
144 }
145
146 protected String getMarkupView() {
147 String markupView = StringPool.BLANK;
148
149 NavBarTag navBarTag = (NavBarTag)findAncestorWithClass(
150 this, NavBarTag.class);
151
152 if (navBarTag != null) {
153 markupView = navBarTag.getMarkupView();
154 }
155
156 return markupView;
157 }
158
159 @Override
160 protected String getPage() {
161 if (Validator.isNotNull(getMarkupView())) {
162 return "/html/taglib/aui/nav/" + getMarkupView() + "/page.jsp";
163 }
164
165 return "/html/taglib/aui/nav/lexicon/page.jsp";
166 }
167
168 @Override
169 protected int processStartTag() throws Exception {
170 return EVAL_BODY_BUFFERED;
171 }
172
173 @Override
174 protected void setAttributes(HttpServletRequest request) {
175 super.setAttributes(request);
176
177 setNamespacedAttribute(request, "id", _getNamespacedId());
178 }
179
180 private String _getNamespacedId() {
181 if (Validator.isNotNull(_namespacedId)) {
182 return _namespacedId;
183 }
184
185 _namespacedId = getId();
186
187 HttpServletRequest request =
188 (HttpServletRequest)pageContext.getRequest();
189
190 if (Validator.isNull(_namespacedId)) {
191 _namespacedId = PortalUtil.getUniqueElementId(
192 request, StringPool.BLANK, AUIUtil.normalizeId("navTag"));
193 }
194
195 PortletResponse portletResponse = (PortletResponse)request.getAttribute(
196 JavaConstants.JAVAX_PORTLET_RESPONSE);
197
198 if ((portletResponse != null) && getUseNamespace()) {
199 _namespacedId = portletResponse.getNamespace() + _namespacedId;
200 }
201
202 return _namespacedId;
203 }
204
205 private boolean _hasSearchResults() {
206 SearchContainer<?> searchContainer = getSearchContainer();
207
208 if (searchContainer == null) {
209 return false;
210 }
211
212 DisplayTerms displayTerms = searchContainer.getDisplayTerms();
213
214 String keywords = displayTerms.getKeywords();
215
216 if (displayTerms.isAdvancedSearch() ||
217 !keywords.equals(StringPool.BLANK)) {
218
219 return true;
220 }
221
222 return false;
223 }
224
225 private boolean _calledCollapsibleSetter;
226 private String _namespacedId;
227
228 }