diff --git a/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabel.java b/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabel.java index b6f05a628c..a49fd3f123 100644 --- a/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabel.java +++ b/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabel.java @@ -28,5 +28,6 @@ public class OutputLabel extends OutputLabelBase { public static final String COMPONENT_TYPE = "org.primefaces.component.OutputLabel"; public static final String STYLE_CLASS = "ui-outputlabel ui-widget"; + public static final String RTL_CLASS = "ui-outputlabel-rtl"; public static final String REQUIRED_FIELD_INDICATOR_CLASS = "ui-outputlabel-rfi"; } \ No newline at end of file diff --git a/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabelBase.java b/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabelBase.java index 566898654e..692123fb9e 100644 --- a/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabelBase.java +++ b/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabelBase.java @@ -25,8 +25,10 @@ import javax.faces.component.html.HtmlOutputLabel; +import org.primefaces.component.api.RTLAware; -public abstract class OutputLabelBase extends HtmlOutputLabel { + +public abstract class OutputLabelBase extends HtmlOutputLabel implements RTLAware { public static final String COMPONENT_FAMILY = "org.primefaces.component"; diff --git a/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabelRenderer.java b/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabelRenderer.java index 9f3d3b68fc..2fbe334af0 100644 --- a/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabelRenderer.java +++ b/primefaces/src/main/java/org/primefaces/component/outputlabel/OutputLabelRenderer.java @@ -64,6 +64,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce final StyleClassBuilder styleClassBuilder = getStyleClassBuilder(context) .add(OutputLabel.STYLE_CLASS) + .add(ComponentUtils.isRTL(context, label), OutputLabel.RTL_CLASS) .add(label.getStyleClass()); final EditableValueHolderState state = new EditableValueHolderState(); @@ -158,6 +159,7 @@ public void invokeContextCallback(FacesContext context, UIComponent target) { writer.writeAttribute("class", styleClassBuilder.build(), "styleClass"); renderPassThruAttributes(context, label, HTML.LABEL_ATTRS); renderDomEvents(context, label, HTML.LABEL_EVENTS); + renderRTLDirection(context, label); if (!isValueBlank(_for)) { writer.writeAttribute("for", state.getClientId(), "for"); diff --git a/primefaces/src/main/java/org/primefaces/renderkit/CoreRenderer.java b/primefaces/src/main/java/org/primefaces/renderkit/CoreRenderer.java index 5bdc3b653f..74ea3a5cc5 100644 --- a/primefaces/src/main/java/org/primefaces/renderkit/CoreRenderer.java +++ b/primefaces/src/main/java/org/primefaces/renderkit/CoreRenderer.java @@ -44,6 +44,7 @@ import org.primefaces.component.api.AjaxSource; import org.primefaces.component.api.ClientBehaviorRenderingMode; import org.primefaces.component.api.MixedClientBehaviorHolder; +import org.primefaces.component.api.RTLAware; import org.primefaces.context.PrimeApplicationContext; import org.primefaces.context.PrimeRequestContext; import org.primefaces.convert.ClientConverter; @@ -296,6 +297,12 @@ protected void renderHiddenInput(FacesContext context, String id, String value, writer.endElement("input"); } + public void renderRTLDirection(FacesContext context, T component) throws IOException { + if (ComponentUtils.isRTL(context, component)) { + context.getResponseWriter().writeAttribute("dir", "rtl", null); + } + } + protected String buildDomEvent(FacesContext context, UIComponent component, String domEvent, String behaviorEvent, String behaviorEventAlias, String command) { diff --git a/primefaces/src/main/java/org/primefaces/renderkit/InputRenderer.java b/primefaces/src/main/java/org/primefaces/renderkit/InputRenderer.java index 8586322c74..993505bb8c 100644 --- a/primefaces/src/main/java/org/primefaces/renderkit/InputRenderer.java +++ b/primefaces/src/main/java/org/primefaces/renderkit/InputRenderer.java @@ -34,7 +34,6 @@ import javax.faces.convert.ConverterException; import org.primefaces.component.api.InputHolder; -import org.primefaces.component.api.RTLAware; import org.primefaces.util.*; public abstract class InputRenderer extends CoreRenderer { @@ -66,12 +65,6 @@ protected boolean shouldDecode(UIInput component) { return !isDisabled(component) && !isReadOnly(component); } - public void renderRTLDirection(FacesContext context, T component) throws IOException { - if (ComponentUtils.isRTL(context, component)) { - context.getResponseWriter().writeAttribute("dir", "rtl", null); - } - } - /** * Adds "aria-required" if the component is required. * diff --git a/primefaces/src/main/resources/META-INF/resources/primefaces/forms/forms.css b/primefaces/src/main/resources/META-INF/resources/primefaces/forms/forms.css index c358e0d172..dbc0599277 100644 --- a/primefaces/src/main/resources/META-INF/resources/primefaces/forms/forms.css +++ b/primefaces/src/main/resources/META-INF/resources/primefaces/forms/forms.css @@ -840,6 +840,11 @@ div.ui-button, .ui-splitbutton { margin-left: 0.4em; } +.ui-outputlabel-rtl .ui-outputlabel-rfi { + margin-left: 0; + margin-right: 0.4em; +} + .ui-outputlabel .ui-outputlabel-label { overflow: hidden; } @@ -1159,6 +1164,11 @@ body .ui-cascadeselect-item-content .ui-cascadeselect-group-icon { line-height: 1; } +.ui-float-label > label.ui-outputlabel-rtl { + left: 0; + right: 0.75rem; +} + .ui-float-label > textarea ~ label { top: 1.2em; }