package com.project.shared.client.html5.impl;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Node;
import com.project.shared.client.html5.Range;
public class RangeImpl extends JavaScriptObject implements Range
{
protected RangeImpl() {}
public final String asString() {
return this.getClass().getName() + " (RangeImpl) { " + this.getStartContainer() + ":" + this.getStartOffset() + ", " + this.getEndContainer() + ":" + this.getEndOffset() + " }";
}
public final native static RangeImpl create()
/*-{
return $wnd.document.createRange();
}-*/;
@Override
public final native Node getStartContainer()
/*-{
return this.startContainer;
}-*/;
@Override
public final native int getStartOffset()
/*-{
return this.startOffset;
}-*/;
@Override
public final native Node getEndContainer()
/*-{
return this.endContainer;
}-*/;
@Override
public final native int getEndOffset()
/*-{
return this.endOffset;
}-*/;
@Override
public final native boolean getCollapsed()
/*-{
return this.collapsed;
}-*/;
@Override
public final native Node getCommonAncestorContainer()
/*-{
return this.commonAncestorContainer;
}-*/;
@Override
public final native void setStart(Node refNode, int offset)
/*-{
this.setStart(refNode, offset);
}-*/;
@Override
public final native void setEnd(Node refNode, int offset)
/*-{
this.setEnd(refNode, offset);
}-*/;
@Override
public final native void setStartBefore(Node refNode)
/*-{
this.setStartBefore(refNode);
}-*/;
@Override
public final native void setStartAfter(Node refNode)
/*-{
this.setStartAfter(refNode);
}-*/;
@Override
public final native void setEndBefore(Node refNode)
/*-{
this.setEndBefore(refNode);
}-*/;
@Override
public final native void setEndAfter(Node refNode)
/*-{
this.setEndAfter(refNode);
}-*/;
@Override
public final native void collapse(boolean toStart)
/*-{
this.collapse(toStart);
}-*/;
@Override
public final native void selectNode(Node refNode)
/*-{
this.selectNode(refNode);
}-*/;
@Override
public final native void selectNodeContents(Node refNode)
/*-{
this.selectNodeContents(refNode);
}-*/;
@Override
public final short compareBoundaryPoints(CompareHow how, Range sourceRange)
{
if (sourceRange instanceof RangeImpl) {
return this.compareBoundaryPointsNative(how, (RangeImpl)sourceRange);
}
throw new RuntimeException("Only implemented for Range class: " + RangeImpl.class.getName());
}
public final native short compareBoundaryPointsNative(CompareHow how, RangeImpl sourceRange)
/*-{
return this.compareBoundaryPoints(how, sourceRange);
}-*/;
@Override
public final native void deleteContents()
/*-{
this.deleteContents();
}-*/;
@Override
public final native Node extractContents()
/*-{
return this.extractContents();
}-*/;
@Override
public final native Node cloneContents()
/*-{
return this.cloneContents();
}-*/;
@Override
public final native void insertNode(Node newNode)
/*-{
this.insetNode(newNode);
}-*/;
@Override
public final native void surroundContents(Node newParent)
/*-{
this.surroundContents(newParent);
}-*/;
@Override
public final native Range cloneRange()
/*-{
return this.cloneRange();
}-*/;
@Override
public final native void detach()
/*-{
this.detach();
}-*/;
@Override
public final native boolean isPointInRange(Node parent, int offset)
/*-{
return this.isPointInRange(parent, offset);
}-*/;
@Override
public final native short comparePoint(Node parent, int offset)
/*-{
if (!this.comparePoint) {
// IE 9 / IERange doesn't implement this.
var tempRange = $wnd.document.createRange();
tempRange.setStart(parent, offset);
tempRange.setEnd(parent, offset+1);
var startToStart = this.compareBoundaryPoints($wnd.Range.START_TO_START, tempRange);
var startToEnd = this.compareBoundaryPoints($wnd.Range.START_TO_END, tempRange);
var onStartOrAfter = 0 >= startToStart;
var onEndOrBefore = 0 <= startToEnd;
if (onStartOrAfter) {
if (onEndOrBefore) {
return 0;
}
return 1;
}
else {
return -1;
}
}
return this.comparePoint(parent, offset);
}-*/;
@Override
public final native boolean intersectsNode(Node node)
/*-{
return this.intersectsNode(node);
}-*/;
}