/** * Copyright 2009 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 org.waveprotocol.wave.client.editor.selection.html; /** * Webkit specific extensions to the Selection interface. * */ public class SelectionWebkit extends SelectionW3CNative { /** * Direction to move the selection. */ public enum Direction { FORWARD("forward"), BACKWARD("backward"), LEFT("left"), RIGHT("right"); String direction; Direction(String direction) { this.direction = direction; } } /** * Movement granularity. * * This class is low-level and DOM specific. The move units here directly * correspond to the DOM move units, LineContainer move units are higher level * abstractions. * * TODO(user): Should this be unified with SignalEvent's MoveUnit */ public enum MoveUnit { CHARACTER("character"), WORD("word"), SENTENCE("sentence"), LINE("line"), PARAGRAPH("paragraph"); String moveUnit; MoveUnit(String moveUnit) { this.moveUnit = moveUnit; } } /** * Gets the current selection object. */ public static SelectionWebkit getSelection() { return SelectionW3CNative.getSelectionGuarded().cast(); } protected SelectionWebkit() { } private final native void modify(String action, String direction, String moveUnit) /*-{ this.modify(action, direction, moveUnit); }-*/; /** * Move the selection in the specified direction and move unit. Note, this * moves the copy of the selection object, but does not change the location of * the selection in the browser. * * @param direction * @param moveUnit */ public final void move(Direction direction, MoveUnit moveUnit) { modify("move", direction.toString(), moveUnit.toString()); } /** * Extends the selection in the specified direction and move unit. Note, this * moves the copy of the selection object, but does not change the location of * the selection in the browser. * * @param direction * @param moveUnit */ public final void extend(Direction direction, MoveUnit moveUnit) { modify("extend", direction.toString(), moveUnit.toString()); } }