/** * 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.io.unsync.UnsyncStringWriter; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.ReflectionUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.taglib.aui.base.BaseIconTag; import com.liferay.taglib.servlet.PipingServletResponse; import com.liferay.taglib.ui.MessageTag; import com.liferay.taglib.util.InlineUtil; import com.liferay.taglib.util.TagResourceBundleUtil; import java.io.IOException; import java.util.ResourceBundle; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; /** * @author Eduardo Lundgren * @author Bruno Basto * @author Nathan Cavanaugh * @author Julio Camarero */ public class IconTag extends BaseIconTag { /** * @deprecated As of 7.0.0, replaced by {@link DirectTag#doTagAsString( * HttpServletRequest, HttpServletResponse)} */ @Deprecated public static String doTag( String cssClass, String image, String markupView, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { IconTag iconTag = new IconTag(); iconTag.setCssClass(cssClass); iconTag.setImage(image); iconTag.setMarkupView(markupView); UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter(); try { iconTag.doTag( request, new PipingServletResponse(response, unsyncStringWriter)); } catch (JspException je) { throw new ServletException(je); } return unsyncStringWriter.toString(); } @Override protected String getPage() { return _PAGE; } @Override protected int processEndTag() throws Exception { JspWriter jspWriter = pageContext.getOut(); String url = getUrl(); if (url == null) { jspWriter.write("<span class=\""); jspWriter.write(GetterUtil.getString(getCssClass())); jspWriter.write("\" "); jspWriter.write(AUIUtil.buildData(getData())); jspWriter.write(" id=\""); jspWriter.write(GetterUtil.getString(getId())); jspWriter.write("\">"); _processIconContent(pageContext); jspWriter.write("</span>"); } else { ATag aTag = new ATag(); aTag.setCssClass(getCssClass()); aTag.setData(getData()); aTag.setHref(getUrl()); aTag.setId(getId()); aTag.setTarget(getTarget()); aTag.doBodyTag(pageContext, this::_processIconContent); } return EVAL_PAGE; } @Override protected void setAttributes(HttpServletRequest request) { if (getSrc() == null) { String src = (String)request.getAttribute("aui:icon:src:ext"); if (Validator.isNotNull(src)) { setSrc(src); } request.removeAttribute("aui:icon:src:ext"); } super.setAttributes(request); } private void _processIconContent(PageContext pageContext) { JspWriter jspWriter = pageContext.getOut(); try { if ("lexicon".equals(getMarkupView())) { jspWriter.write("<svg class=\"lexicon-icon lexicon-icon-"); jspWriter.write(GetterUtil.getString(getImage())); jspWriter.write("\" focusable=\"false\" role=\"img\" title=\""); HttpServletRequest httpServletRequest = (HttpServletRequest)pageContext.getRequest(); ThemeDisplay themeDisplay = (ThemeDisplay)httpServletRequest.getAttribute( WebKeys.THEME_DISPLAY); String label = getLabel(); if (label != null) { ResourceBundle resourceBundle = TagResourceBundleUtil.getResourceBundle( request, themeDisplay.getLocale()); jspWriter.write( HtmlUtil.escapeAttribute( LanguageUtil.get(resourceBundle, label))); } jspWriter.write("\" "); jspWriter.write( InlineUtil.buildDynamicAttributes(getDynamicAttributes())); jspWriter.write(StringPool.GREATER_THAN); jspWriter.write("<use data-href=\""); String src = getSrc(); if (src == null) { src = themeDisplay.getPathThemeImages() + "/lexicon/icons.svg"; } jspWriter.write(src); jspWriter.write(StringPool.POUND); jspWriter.write(GetterUtil.getString(getImage())); jspWriter.write("\" /></svg>"); } else { jspWriter.write("<i class=\"icon-"); jspWriter.write(GetterUtil.getString(getImage())); jspWriter.write("\"></i>"); } String label = getLabel(); if (label != null) { jspWriter.write("<span class=\"taglib-icon-label\">"); MessageTag messageTag = new MessageTag(); messageTag.setKey(label); messageTag.doTag(pageContext); jspWriter.write("</span>"); } } catch (Exception e) { ReflectionUtil.throwException(e); } } private static final String _PAGE = "/html/taglib/aui/icon/page.jsp"; }