001
014
015 package com.liferay.taglib.ui;
016
017 import com.liferay.portal.kernel.language.LanguageUtil;
018 import com.liferay.portal.kernel.servlet.PortalIncludeUtil;
019 import com.liferay.portal.kernel.servlet.taglib.BaseBodyTagSupport;
020 import com.liferay.portal.kernel.servlet.taglib.FileAvailabilityUtil;
021 import com.liferay.portal.kernel.servlet.taglib.aui.ScriptData;
022 import com.liferay.portal.kernel.util.GetterUtil;
023 import com.liferay.portal.kernel.util.IntegerWrapper;
024 import com.liferay.portal.kernel.util.PropsKeys;
025 import com.liferay.portal.kernel.util.PropsUtil;
026 import com.liferay.portal.kernel.util.ServerDetector;
027 import com.liferay.portal.kernel.util.StringPool;
028 import com.liferay.portal.kernel.util.Validator;
029 import com.liferay.portal.kernel.util.WebKeys;
030 import com.liferay.portal.theme.PortletDisplay;
031 import com.liferay.portal.theme.ThemeDisplay;
032 import com.liferay.portal.util.PortalUtil;
033 import com.liferay.taglib.aui.ScriptTag;
034
035 import javax.servlet.http.HttpServletRequest;
036 import javax.servlet.jsp.JspException;
037 import javax.servlet.jsp.JspWriter;
038 import javax.servlet.jsp.tagext.BodyTag;
039
040
044 public class IconMenuTag extends BaseBodyTagSupport implements BodyTag {
045
046 @Override
047 public int doAfterBody() {
048 HttpServletRequest request =
049 (HttpServletRequest)pageContext.getRequest();
050
051 IntegerWrapper iconCount = (IntegerWrapper)request.getAttribute(
052 "liferay-ui:icon-menu:icon-count");
053
054 Boolean singleIcon = (Boolean)request.getAttribute(
055 "liferay-ui:icon-menu:single-icon");
056
057 if ((iconCount != null) && (iconCount.getValue() == 1) &&
058 (singleIcon == null)) {
059
060 bodyContent.clearBody();
061
062 ScriptData scriptData = (ScriptData)request.getAttribute(
063 WebKeys.AUI_SCRIPT_DATA);
064
065 if (scriptData != null) {
066 scriptData.reset();
067 }
068
069 request.setAttribute(
070 "liferay-ui:icon-menu:single-icon", Boolean.TRUE);
071
072 return EVAL_BODY_AGAIN;
073 }
074 else {
075 return SKIP_BODY;
076 }
077 }
078
079 @Override
080 public int doEndTag() throws JspException {
081 try {
082 return processEndTag();
083 }
084 catch (Exception e) {
085 throw new JspException(e);
086 }
087 finally {
088 if (!ServerDetector.isResin()) {
089 _cssClass = null;
090 _direction = "left";
091 _endPage = null;
092 _extended = true;
093 _icon = null;
094 _id = null;
095 _localizeMessage = true;
096 _maxDisplayItems = _DEFAULT_MAX_DISPLAY_ITEMS;
097 _message = "actions";
098 _select = false;
099 _showArrow = true;
100 _showExpanded = false;
101 _showWhenSingleIcon = false;
102 _startPage = null;
103 _triggerCssClass = null;
104 }
105 }
106 }
107
108 @Override
109 public int doStartTag() {
110 HttpServletRequest request =
111 (HttpServletRequest)pageContext.getRequest();
112
113 ScriptData scriptData = (ScriptData)request.getAttribute(
114 WebKeys.AUI_SCRIPT_DATA);
115
116 if (scriptData != null) {
117 scriptData.mark();
118 }
119
120 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
121 WebKeys.THEME_DISPLAY);
122
123 if (_direction == null) {
124 _direction = "left";
125 }
126
127 if (_icon == null) {
128 _icon = themeDisplay.getPathThemeImages() + "/common/tool.png";
129 }
130
131 if (Validator.isNull(_id)) {
132 _id = (String)request.getAttribute(
133 "liferay-ui:search-container-row:rowId");
134
135 if (Validator.isNull(_id)) {
136 _id = PortalUtil.generateRandomKey(
137 request, IconMenuTag.class.getName());
138 }
139
140 _id = _id.concat("_menu");
141 }
142
143 request.setAttribute("liferay-ui:icon-menu:id", _id);
144
145 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
146
147 String namespace = portletDisplay.getNamespace();
148
149 _id = namespace.concat(_id);
150
151 request.setAttribute(
152 "liferay-ui:icon-menu:icon-count", new IntegerWrapper());
153 request.setAttribute(
154 "liferay-ui:icon-menu:showWhenSingleIcon",
155 String.valueOf(_showWhenSingleIcon));
156
157 return EVAL_BODY_BUFFERED;
158 }
159
160 public void setCssClass(String cssClass) {
161 _cssClass = cssClass;
162 }
163
164 public void setDirection(String direction) {
165 _direction = direction;
166 }
167
168 public void setDisabled(boolean disabled) {
169 _disabled = disabled;
170 }
171
172 public void setEndPage(String endPage) {
173 _endPage = endPage;
174 }
175
176 public void setExtended(boolean extended) {
177 _extended = extended;
178 }
179
180 public void setIcon(String icon) {
181 _icon = icon;
182 }
183
184 public void setId(String id) {
185 _id = id;
186 }
187
188 public void setLocalizeMessage(boolean localizeMessage) {
189 _localizeMessage = localizeMessage;
190 }
191
192 public void setMaxDisplayItems(int maxDisplayItems) {
193 if (maxDisplayItems <= 0) {
194 maxDisplayItems = _DEFAULT_MAX_DISPLAY_ITEMS;
195 }
196
197 _maxDisplayItems = maxDisplayItems;
198 }
199
200 public void setMessage(String message) {
201 if (message != null) {
202 _message = message;
203 }
204 }
205
206 public void setSelect(boolean select) {
207 _select = select;
208 }
209
210 public void setShowArrow(boolean showArrow) {
211 _showArrow = showArrow;
212 }
213
214 public void setShowExpanded(boolean showExpanded) {
215 _showExpanded = showExpanded;
216 }
217
218 public void setShowWhenSingleIcon(boolean showWhenSingleIcon) {
219 _showWhenSingleIcon = showWhenSingleIcon;
220 }
221
222 public void setStartPage(String startPage) {
223 _startPage = startPage;
224 }
225
226 public void setTriggerCssClass(String triggerCssClass) {
227 _triggerCssClass = triggerCssClass;
228 }
229
230 public void setUseIconCaret(boolean useIconCaret) {
231 _useIconCaret = useIconCaret;
232 }
233
234 protected String getEndPage() {
235 if (Validator.isNull(_endPage)) {
236 return _END_PAGE;
237 }
238 else {
239 return _endPage;
240 }
241 }
242
243 protected String getStartPage() {
244 if (Validator.isNull(_startPage)) {
245 return _START_PAGE;
246 }
247 else {
248 return _startPage;
249 }
250 }
251
252 protected int processEndTag() throws Exception {
253 HttpServletRequest request =
254 (HttpServletRequest)pageContext.getRequest();
255
256 IntegerWrapper iconCount = (IntegerWrapper)request.getAttribute(
257 "liferay-ui:icon-menu:icon-count");
258
259 request.removeAttribute("liferay-ui:icon-menu:icon-count");
260 request.removeAttribute("liferay-ui:icon-menu:id");
261
262 Boolean singleIcon = (Boolean)request.getAttribute(
263 "liferay-ui:icon-menu:single-icon");
264
265 request.removeAttribute("liferay-ui:icon-menu:single-icon");
266
267 JspWriter jspWriter = pageContext.getOut();
268
269 if ((iconCount != null) && (iconCount.getValue() >= 1) &&
270 ((singleIcon == null) || _showWhenSingleIcon)) {
271
272 if (!FileAvailabilityUtil.isAvailable(
273 pageContext.getServletContext(), getStartPage())) {
274
275 if (_showExpanded) {
276 jspWriter.write("<ul class=\"lfr-menu-expanded ");
277 jspWriter.write("lfr-menu-list");
278
279 if (Validator.isNotNull(_cssClass)) {
280 jspWriter.write(StringPool.SPACE);
281 jspWriter.print(_cssClass);
282 }
283
284 jspWriter.write("\" id=\"");
285 jspWriter.write(_id);
286 jspWriter.write("\">");
287 }
288 else {
289 jspWriter.write("<div class=\"btn-group lfr-icon-menu");
290
291 if (Validator.isNotNull(_cssClass)) {
292 jspWriter.write(StringPool.SPACE);
293 jspWriter.print(_cssClass);
294 }
295
296 if (_direction.equals("up")) {
297 jspWriter.write(" dropup");
298 }
299
300 jspWriter.write("\"><a class=\"dropdown-toggle direction-");
301 jspWriter.write(_direction);
302 jspWriter.write(" max-display-items-");
303 jspWriter.write(String.valueOf(_maxDisplayItems));
304
305 if (_disabled) {
306 jspWriter.write(" disabled");
307 }
308
309 if (_extended) {
310 jspWriter.write(" btn");
311 }
312
313 if (_select) {
314 jspWriter.write(" select");
315 }
316
317 if (Validator.isNotNull(_triggerCssClass)) {
318 jspWriter.write(StringPool.SPACE + _triggerCssClass);
319 }
320
321 String message = _message;
322
323 if (_localizeMessage) {
324 message = LanguageUtil.get(pageContext, _message);
325 }
326
327 jspWriter.write("\" href=\"javascript:;\" id=\"");
328 jspWriter.write(_id);
329 jspWriter.write("\" title=\"");
330 jspWriter.write(message);
331 jspWriter.write("\">");
332
333 if (_showArrow && _direction.equals("left")) {
334 String caret = "caret";
335
336 if (_useIconCaret) {
337 caret = "icon-caret-left";
338 }
339
340 jspWriter.write("<i class=\"");
341 jspWriter.write(caret);
342 jspWriter.write("\"></i> ");
343 }
344
345 boolean auiImage = false;
346
347 if (Validator.isNotNull(_icon)) {
348 auiImage = _icon.startsWith(_AUI_PATH);
349
350 if (auiImage) {
351 jspWriter.write(" <i class=\"icon-");
352 jspWriter.write(
353 _icon.substring(_AUI_PATH.length()));
354 jspWriter.write("\"></i>");
355 }
356 else {
357 jspWriter.write("<img alt=\"\" src=\"");
358 jspWriter.write(_icon);
359 jspWriter.write("\" /> ");
360 }
361 }
362
363 if (Validator.isNotNull(message)) {
364 jspWriter.write("<span class=\"lfr-icon-menu-text\">");
365 jspWriter.write(message);
366 jspWriter.write("</span>");
367 }
368
369 if (_showArrow && !_direction.equals("left")) {
370 String caret = "caret";
371
372 if (_useIconCaret) {
373 caret = "icon-caret-" + _direction;
374 }
375
376 jspWriter.write("<i class=\"");
377 jspWriter.write(caret);
378 jspWriter.write("\"></i> ");
379 }
380
381 jspWriter.write("</a>");
382
383 ScriptTag.doTag(
384 null, "liferay-menu",
385 "Liferay.Menu.register('" + _id + "');", bodyContent,
386 pageContext);
387
388 jspWriter.write("<ul class=\"dropdown-menu lfr-menu-list");
389 jspWriter.write(" direction-");
390 jspWriter.write(_direction);
391 jspWriter.write("\">");
392 }
393 }
394 else {
395 PortalIncludeUtil.include(pageContext, getStartPage());
396 }
397 }
398
399 writeBodyContent(jspWriter);
400
401 if ((iconCount != null) && (iconCount.getValue() >= 1) &&
402 ((singleIcon == null) || _showWhenSingleIcon)) {
403
404 if (!FileAvailabilityUtil.isAvailable(
405 pageContext.getServletContext(), getEndPage())) {
406
407 jspWriter.write("</ul>");
408
409 if (_showExpanded) {
410 ScriptTag.doTag(
411 null, "liferay-menu",
412 "Liferay.Menu.handleFocus('#" + _id + "menu');",
413 bodyContent, pageContext);
414 }
415 else {
416 jspWriter.write("</div>");
417 }
418 }
419 else {
420 PortalIncludeUtil.include(pageContext, getEndPage());
421 }
422 }
423
424 request.removeAttribute("liferay-ui:icon-menu:showWhenSingleIcon");
425
426 return EVAL_PAGE;
427 }
428
429 private static final String _AUI_PATH = "../aui/";
430
431 private static final int _DEFAULT_MAX_DISPLAY_ITEMS = GetterUtil.getInteger(
432 PropsUtil.get(PropsKeys.ICON_MENU_MAX_DISPLAY_ITEMS));
433
434 private static final String _END_PAGE = "/html/taglib/ui/icon_menu/end.jsp";
435
436 private static final String _START_PAGE =
437 "/html/taglib/ui/icon_menu/start.jsp";
438
439 private String _cssClass;
440 private String _direction = "left";
441 private boolean _disabled;
442 private String _endPage;
443 private boolean _extended = true;
444 private String _icon;
445 private String _id;
446 private boolean _localizeMessage = true;
447 private int _maxDisplayItems = _DEFAULT_MAX_DISPLAY_ITEMS;
448 private String _message = "actions";
449 private boolean _select;
450 private boolean _showArrow = true;
451 private boolean _showExpanded;
452 private boolean _showWhenSingleIcon;
453 private String _startPage;
454 private String _triggerCssClass;
455 private boolean _useIconCaret;
456
457 }