All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.larmic.butterfaces.component.renderkit.html_basic.TooltipRenderer Maven / Gradle / Ivy

package de.larmic.butterfaces.component.renderkit.html_basic;

import de.larmic.butterfaces.component.base.renderer.HtmlBasicRenderer;
import de.larmic.butterfaces.component.html.HtmlTooltip;
import de.larmic.butterfaces.component.partrenderer.StringUtils;

import javax.faces.component.UIComponent;
import javax.faces.component.UINamingContainer;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.FacesRenderer;
import java.io.IOException;

/**
 * Created by larmic on 31.07.14.
 */
@FacesRenderer(componentFamily = HtmlTooltip.COMPONENT_FAMILY, rendererType = HtmlTooltip.RENDERER_TYPE)
public class TooltipRenderer extends HtmlBasicRenderer {

    @Override
    public void encodeEnd(final FacesContext context, final UIComponent component) throws IOException {
        rendererParamsNotNull(context, component);

        if (!shouldEncode(component)) {
            return;
        }

        final HtmlTooltip tooltip = (HtmlTooltip) component;

        final ResponseWriter writer = context.getResponseWriter();

        final char separatorChar = UINamingContainer.getSeparatorChar(FacesContext.getCurrentInstance());
        final String contentId = component.getClientId().replace(separatorChar + "", "_");
        final String forSelector = tooltip.getFor();

        writer.startElement("span", tooltip);
        writer.writeAttribute("name", contentId, null);
        writer.writeAttribute("class", "butter-component-tooltip-content", null);
        for (UIComponent child : tooltip.getChildren()) {
            child.encodeAll(context);
        }
        writer.endElement("span");

        writer.startElement("script", tooltip);
        writer.writeText("jQuery(document).ready(function() {\n", null);
        writer.writeText("   jQuery('", null);
        writer.writeText(forSelector, null);
        writer.writeText("')._butterTooltip({\n", null);
        writer.writeText("      forElement: ", null);
        writer.writeText(getNullSafeStringParameter(tooltip.getFor()), null);
        writer.writeText(",\n      trigger: ", null);
        writer.writeText(getNullSafeStringParameter(tooltip.getTrigger()), null);
        writer.writeText(",\n      title: ", null);
        writer.writeText(getNullSafeStringParameter(tooltip.getTitle()), null);
        writer.writeText(",\n      placement: ", null);
        writer.writeText(getNullSafeStringParameter(tooltip.getPlacement()), null);
        writer.writeText(",\n      placementFunction: ", null);
        writer.writeText(getNullSafeFunctionParameter(tooltip.getPlacementFunction()), null);
        writer.writeText(",\n      contentByName: '", null);
        writer.writeText(contentId, null);
        writer.writeText("',\n      minVerticalOffset: ", null);
        writer.writeText(getNullSafeIntegerParameter(tooltip.getMinVerticalOffset()), null);
        writer.writeText(",\n      minHorizontalOffset: ", null);
        writer.writeText(getNullSafeIntegerParameter(tooltip.getMinHorizontalOffset()), null);
        writer.writeText("\n   })\n});", null);
        writer.endElement("script");
    }

    private String getNullSafeStringParameter(final String value) {
        return "'" + StringUtils.getNullSafeValue(value) + "'";
    }

    private String getNullSafeFunctionParameter(final String value) {
        final String nullSafeValue = StringUtils.getNullSafeValue(value);
        return StringUtils.isNotEmpty(nullSafeValue) ? nullSafeValue : "''";
    }

    private String getNullSafeIntegerParameter(final Integer value) {
        return value == null ? "''" : String.valueOf(value);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy