     marker
 
   #
-  # Determine whether the element is visible and clickable. If it is, return the element and the rect
-  # bounding the element in the viewport.
+  # Determine whether the element is visible and clickable. If it is, return the element and the rect bounding
+  # the element in the viewport.  There may be more than one part of element which is clickable (for example,
+  # if it's an image), therefore we return a list of element/rect pairs.
+  #
   getVisibleClickable: (element) ->
     tagName = element.tagName.toLowerCase()
     isClickable = false

        nonOverlappingElements.push {element: visibleElement.element, rect: rects[0]}
      else
        # Every part of the element is covered by some other element, so just insert the whole element's
        # rect. Except for elements with tabIndex set; these are often more trouble than they're worth.
        # TODO(mrmr1993): This is probably the wrong thing to do, but we don't want to stop being able to
        # click some elements that we could click before.
        nonOverlappingElements.push visibleElement unless visibleElement.onlyHasTabIndex

    nonOverlappingElements


    # Check aria properties to see if the element should be ignored.
    if (element.getAttribute("aria-hidden")?.toLowerCase() in ["", "true"] or
        element.getAttribute("aria-disabled")?.toLowerCase() in ["", "true"])
      return [] # This element should never have a link hint.

    # Check for attributes that make an element clickable regardless of its tagName.
    if (element.hasAttribute("onclick") or
