| /* |
| * 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; |
| } |
| } |
| } |
| } |