blob: 535e11a8f5968226d2e3746b6afda19bfaf5cc49 [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.i18n.client;
import com.google.gwt.dom.client.Element;
import com.google.gwt.i18n.client.HasDirection.Direction;
/**
* A set of bidi-related utility methods.
*/
public class BidiUtils {
/**
* The name of the element property which controls element directionality.
*/
public static final String DIR_PROPERTY_NAME = "dir";
/**
* The value for the directionality property which will set the element directionality
* to right-to-left.
*/
private static final String DIR_PROPERTY_VALUE_RTL = "rtl";
/**
* The value for the directionality property which will set the element directionality
* to left-to-right.
*/
private static final String DIR_PROPERTY_VALUE_LTR = "ltr";
/**
* Gets the directionality of an element.
*
* @param elem the element on which to check the directionality property
* @return <code>RTL</code> if the directionality is right-to-left,
* <code>LTR</code> if the directionality is left-to-right, or
* <code>DEFAULT</code> if the directionality is not explicitly set
*/
public static HasDirection.Direction getDirectionOnElement(Element elem) {
String dirPropertyValue = elem.getPropertyString(DIR_PROPERTY_NAME);
if (DIR_PROPERTY_VALUE_RTL.equalsIgnoreCase(dirPropertyValue)) {
return HasDirection.Direction.RTL;
} else if (DIR_PROPERTY_VALUE_LTR.equalsIgnoreCase(dirPropertyValue)) {
return HasDirection.Direction.LTR;
}
return HasDirection.Direction.DEFAULT;
}
/**
* Sets the directionality property for an element.
*
* @param elem the element on which to set the property
* @param direction <code>RTL</code> if the directionality should be set to right-to-left,
* <code>LTR</code> if the directionality should be set to left-to-right
* <code>DEFAULT</code> if the directionality should be removed from the element
*/
public static void setDirectionOnElement(Element elem, Direction direction) {
switch (direction) {
case RTL: {
elem.setPropertyString(DIR_PROPERTY_NAME, DIR_PROPERTY_VALUE_RTL);
break;
}
case LTR: {
elem.setPropertyString(DIR_PROPERTY_NAME, DIR_PROPERTY_VALUE_LTR);
break;
}
case DEFAULT: {
if (getDirectionOnElement(elem) != HasDirection.Direction.DEFAULT) {
// only clear out the dir property if it has already been set to something
// explicitly
elem.setPropertyString(DIR_PROPERTY_NAME, "");
}
break;
}
}
}
}