#import <DOM/Node.idl>
#import <DOM/Range.idl>

// https://w3c.github.io/selection-api/#selection-interface
[Exposed=Window]
interface Selection {

    readonly attribute Node? anchorNode;
    readonly attribute unsigned long anchorOffset;
    readonly attribute Node? focusNode;
    readonly attribute unsigned long focusOffset;
    readonly attribute boolean isCollapsed;
    readonly attribute unsigned long rangeCount;
    readonly attribute DOMString type;
    readonly attribute DOMString direction;
    Range getRangeAt(unsigned long index);
    undefined addRange(Range range);
    undefined removeRange(Range range);
    undefined removeAllRanges();
    undefined empty();
    undefined collapse(Node? node, optional unsigned long offset = 0);
    undefined setPosition(Node? node, optional unsigned long offset = 0);
    undefined collapseToStart();
    undefined collapseToEnd();
    undefined extend(Node node, optional unsigned long offset = 0);
    undefined setBaseAndExtent(Node anchorNode, unsigned long anchorOffset, Node focusNode, unsigned long focusOffset);
    undefined selectAllChildren(Node node);
    undefined modify(optional DOMString alter, optional DOMString direction, optional DOMString granularity);
    [CEReactions] undefined deleteFromDocument();
    boolean containsNode(Node node, optional boolean allowPartialContainment = false);
    stringifier;

};
