/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.api.editor.annotation;
import elemental.dom.Element;
import elemental.html.LIElement;
import org.eclipse.che.ide.ui.Tooltip;
import org.eclipse.che.ide.ui.Tooltip.Builder;
import org.eclipse.che.ide.ui.Tooltip.TooltipPositionerBuilder;
import org.eclipse.che.ide.ui.Tooltip.TooltipRenderer;
import org.eclipse.che.ide.ui.menu.PositionController;
import org.eclipse.che.ide.ui.menu.PositionController.Positioner;
import org.eclipse.che.ide.ui.menu.PositionController.PositionerBuilder;
import org.eclipse.che.ide.util.dom.Elements;
/**
* Factory for a tooltip that shows list of messages.
*/
public final class ListTooltipFactory {
private ListTooltipFactory() {
}
/** Static factory method for creating a list tooltip. */
public static Tooltip create(final Element targetElement,
final String header,
final PositionController.VerticalAlign vAlign,
final PositionController.HorizontalAlign hAlign,
final String... tooltipText) {
final PositionerBuilder positionrBuilder = new TooltipPositionerBuilder()
.setVerticalAlign(vAlign)
.setHorizontalAlign(hAlign);
final Positioner positioner = positionrBuilder.buildAnchorPositioner(targetElement);
final Builder builder = new Builder(targetElement, positioner);
builder.setTooltipRenderer(new ListRenderer(header, tooltipText));
return builder.build();
}
private static class ListRenderer implements TooltipRenderer {
private final String header;
private final String[] tooltipText;
ListRenderer(final String header, final String... tooltipText) {
this.tooltipText = tooltipText;
this.header = header;
}
@Override
public Element renderDom() {
final Element content = Elements.createSpanElement();
content.setInnerText(header);
final Element list = Elements.createUListElement();
for (final String tooltip : tooltipText) {
final LIElement item = Elements.createLiElement();
item.appendChild(Elements.createTextNode(tooltip));
list.appendChild(item);
}
content.appendChild(list);
return content;
}
}
}