1 /* 2 * Copyright (c) 2002-2025 Gargoyle Software Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * https://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 package org.htmlunit.html; 16 17 import java.util.Map; 18 19 import org.apache.commons.lang3.StringUtils; 20 import org.htmlunit.SgmlPage; 21 22 /** 23 * Wrapper for the HTML element "map". 24 * 25 * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a> 26 * @author David K. Taylor 27 * @author <a href="mailto:cse@dynabean.de">Christian Sell</a> 28 * @author Ahmed Ashour 29 * @author Ronald Brill 30 * @author Frank Danek 31 */ 32 public class HtmlMap extends HtmlElement { 33 34 /** The HTML tag represented by this element. */ 35 public static final String TAG_NAME = "map"; 36 37 /** 38 * Creates an instance of HtmlMap 39 * 40 * @param qualifiedName the qualified name of the element type to instantiate 41 * @param page the HtmlPage that contains this element 42 * @param attributes the initial attributes 43 */ 44 HtmlMap(final String qualifiedName, final SgmlPage page, 45 final Map<String, DomAttr> attributes) { 46 super(qualifiedName, page, attributes); 47 } 48 49 /** 50 * Returns the value of the attribute {@code name}. Refer to the 51 * <a href="http://www.w3.org/TR/html401/">HTML 4.01</a> 52 * documentation for details on the use of this attribute. 53 * 54 * @return the value of the attribute {@code name} 55 * or an empty string if that attribute isn't defined. 56 */ 57 public final String getNameAttribute() { 58 return getAttributeDirect(NAME_ATTRIBUTE); 59 } 60 61 /** 62 * {@inheritDoc} 63 */ 64 @Override 65 public DisplayStyle getDefaultStyleDisplay() { 66 return DisplayStyle.INLINE; 67 } 68 69 @Override 70 public boolean isDisplayed() { 71 final HtmlImage image = findReferencingImage(); 72 if (null != image) { 73 return image.isDisplayed(); 74 } 75 return false; 76 } 77 78 private HtmlImage findReferencingImage() { 79 final HtmlPage page = getHtmlPageOrNull(); 80 String name = getNameAttribute(); 81 if (null != page && StringUtils.isNotBlank(name)) { 82 name = "#" + name.trim(); 83 for (final HtmlElement elem : page.getDocumentElement().getStaticElementsByTagName("img")) { 84 final HtmlImage image = (HtmlImage) elem; 85 if (name.equals(image.getUseMapAttribute())) { 86 return image; 87 } 88 } 89 } 90 return null; 91 } 92 }