[w3c/selection-api] Add Selection/Range methods based on anchestor element (#102)

Add function prototypes for recalculating `anchorNode`/`anchorOffset` and `focusNode`/`focusOffset` based on a given anchestor node.

That functionality is necessary to track and regain a selection in an editing host when DOM manipulation takes place.
<hr/>

### Suggested IDL Interfaces

```js
partial interface Selection {
  Range getRangeAt(unsigned long index, Element contextElement);
};

partial interface Window {
  [Throws] Selection? getSelection(Element contextElement);
};
```

<hr/>

### Details

### 1.
```js
const selObj = window.getSelection(contextElement: HTMLElement);
```

Should yield:

```js
selObj.anchorNode === selObj.focusNode === contextElement;

selObj.anchorOffset = AnchorCharacterOffsetFromContextElement(contextElement);
selObj.focusOffset = FocusCharacterOffsetFromContextElement(contextElement);
```
<br/>

### 2.
```js
const rngObj = window.getSelection().getRangeAt(index: number, contextElement: HTMLElement);
```

Should yield:

```js
rngObj.commonAncestorContainer === rngObj.startContainer === rngObj.endContainer === contextElement;

rngObj.startOffset = AnchorCharacterOffsetFromContextElement(contextElement);
rngObj.endOffset = FocusCharacterOffsetFromContextElement(contextElement);
```

<hr/>

Both suggested functions are supposed to either throw an `ReferenceError` or yield `void 0` when `contextElement` is not an anchestor of both, `selObj.anchorNode`/`selObj.focusNode` and `rngObj.startOffset`/`rngObj.endOffset`, resp.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/selection-api/issues/102

Received on Wednesday, 27 February 2019 12:19:15 UTC