Ejemplo n.º 1
0
        public void SetBaseAndExtent(Node anchorNode, int anchorOffset, Node focusNode, int focusOffset)
        {
            if (anchorOffset > anchorNode.nodeLength)
            {
                throw new IndexSizeError($"{nameof(anchorOffset)} exceeds {nameof(anchorNode.nodeLength)}");
            }
            if (focusOffset > focusNode.nodeLength)
            {
                throw new IndexSizeError($"{nameof(focusOffset)} exceeds {nameof(focusNode.nodeLength)}");
            }
            if (!ReferenceEquals(document, anchorNode.getRootNode()) || !ReferenceEquals(document, focusNode.getRootNode()))
            {
                return;
            }

            var anchor   = new BoundaryPoint(anchorNode, anchorOffset);
            var focus    = new BoundaryPoint(focusNode, focusOffset);
            var newRange = new Range(document);

            if (Range.Get_Boundary_Position(anchor, focus) == EBoundaryPosition.Before)
            {
                newRange.setStart(anchor.node, anchor.offset);
                newRange.setEnd(focus.node, focus.offset);
            }
            else
            {
                newRange.setStart(focus.node, focus.offset);
                newRange.setEnd(anchor.node, anchor.offset);
            }

            _range    = newRange;
            direction = (Range.Get_Boundary_Position(focus, anchor) == EBoundaryPosition.Before) ? ESelectionDirection.Backward : ESelectionDirection.Forward;
        }
Ejemplo n.º 2
0
        public void Extend(Node node, int offset = 0)
        {
            if (_range == null)
            {
                throw new InvalidStateError($"Selection has no set range");
            }
            if (!ReferenceEquals(document, node.getRootNode()))
            {
                return;
            }

            var oldAnchor = Anchor.Value;
            var oldFocus  = Focus.Value;
            var newFocus  = new BoundaryPoint(node, offset);
            var newRange  = new Range(document);

            if (!ReferenceEquals(_range.root, node.getRootNode()))
            {
                newRange.setStart(node, offset);
                newRange.setEnd(node, offset);
            }
            else if (Range.Get_Boundary_Position(oldAnchor, newFocus) != EBoundaryPosition.After)
            {
                newRange.setStart(oldAnchor.node, oldAnchor.offset);
                newRange.setEnd(newFocus.node, newFocus.offset);
            }
            else
            {
                newRange.setStart(newFocus.node, newFocus.offset);
                newRange.setEnd(oldAnchor.node, oldAnchor.offset);
            }

            _range    = newRange;
            direction = Range.Get_Boundary_Position(newFocus, oldAnchor) == EBoundaryPosition.Before ? ESelectionDirection.Backward : ESelectionDirection.Forward;
        }
Ejemplo n.º 3
0
        public void SelectAllChildren(Node node)
        {
            if (!ReferenceEquals(document, node.getRootNode()))
            {
                return;
            }

            var newRange   = new Range(document);
            var nodeLength = node.nodeLength;

            newRange.setStart(node, 0);
            newRange.setEnd(node, nodeLength);
            _range    = newRange;
            direction = ESelectionDirection.Forward;
        }