/* * � Copyright IBM Corp. 2014 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.ibm.xsp.theme.bootstrap.renderkit.html.extlib.layout.tree; import java.io.IOException; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import com.ibm.commons.util.StringUtil; import com.ibm.xsp.renderkit.html_basic.HtmlRendererUtil; import com.ibm.xsp.renderkit.html_extended.RenderUtil; import com.ibm.xsp.theme.bootstrap.renderkit.html.extlib.util.NavRenderer; import com.ibm.xsp.util.JSUtil; public class TitleBarTabsRenderer extends NavRenderer { private static final long serialVersionUID = 1L; public TitleBarTabsRenderer() { } @Override protected boolean makeSelectedActive(TreeContextImpl node) { return true; } @Override protected String getContainerStyleClass(TreeContextImpl node) { if(node.getDepth()==1) { return "nav nav-tabs applayout-titlebar-tabs"; // $NON-NLS-1$ } return super.getContainerStyleClass(node); } @Override protected String getItemStyleClass(TreeContextImpl tree, boolean enabled, boolean selected) { return super.getItemStyleClass(tree, enabled, selected); } @Override protected void renderChildren(FacesContext context, ResponseWriter writer, TreeContextImpl tree) throws IOException { // Do not render the children - only one level... // if(tree.getDepth()==1) { super.renderChildren(context, writer, tree); // } } @Override protected void renderContainerRole(FacesContext context, ResponseWriter writer, TreeContextImpl tree) throws IOException { // Defect201652 - A11Y - add correct tab role writer.writeAttribute("role", "tablist",null); // $NON-NLS-1$ $NON-NLS-2$ } @Override protected String getItemRole(TreeContextImpl tree, boolean enabled, boolean selected) { String nodeRole = tree.getNode().getRole(); if(StringUtil.isNotEmpty(nodeRole)) { return tree.getNode().getRole(); }else{ return "tab"; // $NON-NLS-1$ } } @Override protected void renderEntryNode(FacesContext context, ResponseWriter writer, TreeContextImpl tree) throws IOException { boolean enabled = tree.getNode().isEnabled(); boolean selected = tree.getNode().isSelected(); String itemTag = getItemTag(); if(StringUtil.isNotEmpty(itemTag)) { writer.startElement(itemTag,null); String style = getItemStyle(tree,enabled,selected); if(StringUtil.isNotEmpty(style)) { writer.writeAttribute("style",style,null); // $NON-NLS-1$ } String styleClass = getItemStyleClass(tree,enabled,selected); if(StringUtil.isNotEmpty(styleClass)) { writer.writeAttribute("class",styleClass,null); // $NON-NLS-1$ } String title = getItemTitle(tree,enabled,selected); if(StringUtil.isNotEmpty(title)) { writer.writeAttribute("title",title,null); // $NON-NLS-1$ } } boolean separate = isChildrenSeparate(); // render the item content renderEntryItemContent(context, writer, tree, enabled, selected); // and its children if(!separate) { renderChildren(context, writer, tree); } if(StringUtil.isNotEmpty(itemTag)) { writer.endElement(itemTag); } JSUtil.writeln(writer); // and its children if(separate && tree.getNodeContext().hasChildren()) { if(StringUtil.isNotEmpty(itemTag)) { writer.startElement(itemTag,null); renderEntryNodeChildAttributes(context, writer, tree, enabled, selected); } renderChildren(context, writer, tree); if(StringUtil.isNotEmpty(itemTag)) { writer.endElement(itemTag); } JSUtil.writeln(writer); } } @Override protected void renderEntryItemContent(FacesContext context, ResponseWriter writer, TreeContextImpl tree, boolean enabled, boolean selected) throws IOException { boolean hasLink = false; boolean alwaysRenderLinks = alwaysRenderItemLink(tree, enabled, selected); if(enabled) { String href = tree.getNode().getHref(); if(StringUtil.isNotEmpty(href)) { writer.startElement("a",null); String role = getItemRole(tree, enabled, selected); if (StringUtil.isNotEmpty(role)) { writer.writeAttribute("role", role, null); // $NON-NLS-1$ } RenderUtil.writeLinkAttribute(context,writer,href); hasLink = true; } else { String onclick = findNodeOnClick(tree); if(StringUtil.isNotEmpty(onclick)) { writer.startElement("a",null); String role = getItemRole(tree, enabled, selected); if (StringUtil.isNotEmpty(role)) { writer.writeAttribute("role", role, null); // $NON-NLS-1$ } writer.writeAttribute("href","javascript:;",null); // $NON-NLS-1$ $NON-NLS-2$ writer.writeAttribute("onclick", "javascript:"+onclick, null); // $NON-NLS-1$ $NON-NLS-2$ hasLink = true; } } } if(!hasLink && alwaysRenderLinks) { // Render an empty link... writer.startElement("a",null); String role = getItemRole(tree, enabled, selected); if (StringUtil.isNotEmpty(role)) { writer.writeAttribute("role", role, null); // $NON-NLS-1$ } hasLink = true; }else if(!hasLink && !alwaysRenderLinks) { //No link, so add role to containing LI element String role = getItemRole(tree, enabled, selected); if (StringUtil.isNotEmpty(role)) { writer.writeAttribute("role", role, null); // $NON-NLS-1$ } } if(hasLink) { renderEntryItemLinkAttributes(context, writer, tree, enabled, selected); } String image = tree.getNode().getImage(); boolean hasImage = StringUtil.isNotEmpty(image); if(hasImage) { writer.startElement("img",null); // $NON-NLS-1$ image = HtmlRendererUtil.getImageURL(context, image); writer.writeAttribute("src",image,null); // $NON-NLS-1$ String imageAlt = tree.getNode().getImageAlt(); if (StringUtil.isNotEmpty(imageAlt)) { writer.writeAttribute("alt",imageAlt,null); // $NON-NLS-1$ } String imageHeight = tree.getNode().getImageHeight(); if (StringUtil.isNotEmpty(imageHeight)) { writer.writeAttribute("height",imageHeight,null); // $NON-NLS-1$ } String imageWidth = tree.getNode().getImageWidth(); if (StringUtil.isNotEmpty(imageWidth)) { writer.writeAttribute("width",imageWidth,null); // $NON-NLS-1$ } writer.endElement("img"); // $NON-NLS-1$ } // Generate a regular node renderEntryItemLabel(context, writer, tree, enabled, selected); // Render a popup image, if any writePopupImage(context, writer, tree); if(hasLink || alwaysRenderLinks) { writer.endElement("a"); tree.markCurrentAsAction(); } } }