001
014
015 package com.liferay.taglib.aui;
016
017 import com.liferay.portal.kernel.language.LanguageUtil;
018 import com.liferay.portal.kernel.util.GetterUtil;
019 import com.liferay.portal.kernel.util.HtmlUtil;
020 import com.liferay.portal.kernel.util.JavaConstants;
021 import com.liferay.portal.kernel.util.StringPool;
022 import com.liferay.portal.kernel.util.Validator;
023 import com.liferay.taglib.aui.base.BaseATag;
024 import com.liferay.taglib.util.InlineUtil;
025
026 import java.io.IOException;
027
028 import java.util.Map;
029
030 import javax.portlet.PortletResponse;
031
032 import javax.servlet.http.HttpServletRequest;
033 import javax.servlet.jsp.JspWriter;
034
035
041 public class ATag extends BaseATag {
042
043 protected boolean isOpensNewWindow() {
044 String target = getTarget();
045
046 if ((target != null) &&
047 (target.equals("_blank") || target.equals("_new"))) {
048
049 return true;
050 }
051 else {
052 return false;
053 }
054 }
055
056 @Override
057 protected int processEndTag() throws Exception {
058 JspWriter jspWriter = pageContext.getOut();
059
060 if (Validator.isNotNull(getHref())) {
061 if (isOpensNewWindow()) {
062 jspWriter.write("<span class=\"opens-new-window-accessible\">");
063 jspWriter.write(
064 LanguageUtil.get(pageContext, "opens-new-window"));
065 jspWriter.write("</span>");
066 }
067
068 jspWriter.write("</a>");
069 }
070 else {
071 jspWriter.write("</span>");
072 }
073
074 return EVAL_PAGE;
075 }
076
077 @Override
078 protected int processStartTag() throws Exception {
079 JspWriter jspWriter = pageContext.getOut();
080
081 String ariaRole = getAriaRole();
082 String cssClass = getCssClass();
083 Map<String, Object> data = getData();
084 String href = getHref();
085 String id = getId();
086 String label = getLabel();
087 String lang = getLang();
088 String namespace = _getNamespace();
089 String onClick = getOnClick();
090 String target = getTarget();
091 String title = getTitle();
092
093 if (Validator.isNotNull(href)) {
094 jspWriter.write("<a ");
095
096 jspWriter.write("href=\"");
097 jspWriter.write(HtmlUtil.escapeAttribute(href));
098 jspWriter.write("\" ");
099
100 if (Validator.isNotNull(target)) {
101 jspWriter.write("target=\"");
102 jspWriter.write(target);
103 jspWriter.write("\" ");
104 }
105 }
106 else {
107 jspWriter.write("<span ");
108 }
109
110 if (Validator.isNotNull(cssClass)) {
111 jspWriter.write("class=\"");
112 jspWriter.write(cssClass);
113 jspWriter.write("\" ");
114 }
115
116 if (Validator.isNotNull(id)) {
117 jspWriter.write("id=\"");
118 jspWriter.write(namespace);
119 jspWriter.write(id);
120 jspWriter.write("\" ");
121 }
122
123 if (Validator.isNotNull(lang)) {
124 jspWriter.write("lang=\"");
125 jspWriter.write(lang);
126 jspWriter.write("\" ");
127 }
128
129 if (Validator.isNotNull(onClick)) {
130 jspWriter.write("onClick=\"");
131 jspWriter.write(onClick);
132 jspWriter.write("\" ");
133 }
134
135 if (Validator.isNotNull(ariaRole)) {
136 jspWriter.write("role=\"");
137 jspWriter.write(ariaRole);
138 jspWriter.write("\" ");
139 }
140
141 if (Validator.isNotNull(title) || isOpensNewWindow()) {
142 jspWriter.write("title=\"");
143
144 if (Validator.isNotNull(title)) {
145 jspWriter.write(LanguageUtil.get(pageContext, title));
146 }
147
148 if (isOpensNewWindow()) {
149 jspWriter.write(
150 LanguageUtil.get(pageContext, "opens-new-window"));
151 }
152
153 jspWriter.write("\" ");
154 }
155
156 if (data != null) {
157 jspWriter.write(AUIUtil.buildData(data));
158 }
159
160 _writeDynamicAttributes(jspWriter);
161
162 jspWriter.write(">");
163
164 if (Validator.isNotNull(label)) {
165 jspWriter.write(LanguageUtil.get(pageContext, label));
166 }
167
168 return EVAL_BODY_INCLUDE;
169 }
170
171 private String _getNamespace() {
172 HttpServletRequest request =
173 (HttpServletRequest)pageContext.getRequest();
174
175 PortletResponse portletResponse = (PortletResponse)request.getAttribute(
176 JavaConstants.JAVAX_PORTLET_RESPONSE);
177
178 String namespace = StringPool.BLANK;
179
180 boolean useNamespace = GetterUtil.getBoolean(
181 (String)request.getAttribute("aui:form:useNamespace"), true);
182
183 if ((portletResponse != null) && useNamespace) {
184 namespace = portletResponse.getNamespace();
185 }
186
187 return namespace;
188 }
189
190 private void _writeDynamicAttributes(JspWriter jspWriter)
191 throws IOException {
192
193 String dynamicAttributesString = InlineUtil.buildDynamicAttributes(
194 getDynamicAttributes());
195
196 if (Validator.isNotNull(dynamicAttributesString)) {
197 jspWriter.write(dynamicAttributesString);
198 }
199 }
200
201 }