| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copied from https://stackoverflow.com/a/20336116
- const isDescendant=(parent, child)=> {
- // from http://stackoverflow.com/questions/2234979/how-to-check-in-javascript-if-one-element-is-a-child-of-another
- let node = child;
- while (node != null) {
- if (node == parent) {
- return true;
- }
- node = node.parentNode;
- }
- return false;
- }
- const getNodesBetween=(rootNode, node1, node2)=> {
- const resultNodes = [];
- let isBetweenNodes = false;
- for (let i = 0; i < rootNode.childNodes.length; i+= 1) {
- if (isDescendant(rootNode.childNodes[i], node1) || isDescendant(rootNode.childNodes[i], node2)) {
- if (resultNodes.length == 0) {
- isBetweenNodes = true;
- } else {
- isBetweenNodes = false;
- }
- resultNodes.push(rootNode.childNodes[i]);
- } else if (resultNodes.length == 0) {
- } else if (isBetweenNodes) {
- resultNodes.push(rootNode.childNodes[i]);
- } else {
- return resultNodes;
- }
- };
- if (resultNodes.length == 0) {
- return [rootNode];
- } else if (isDescendant(resultNodes[resultNodes.length - 1], node1) || isDescendant(resultNodes[resultNodes.length - 1], node2)) {
- return resultNodes;
- } else {
- // same child node for both should never happen
- return [resultNodes[0]];
- }
- }
- export const getSelectedNodes = (selectionAncestor, startNode)=> {
- // from https://developer.mozilla.org/en-US/docs/Web/API/Selection
- let selection = null;
- if(window.getSelection){
- selection = window.getSelection();
- } else if(document.selection){
- selection = document.selection;
- }
- if(selection) {
- if (selection.isCollapsed) {
- return [];
- };
- const node2 = selection.focusNode;
- return getNodesBetween(selectionAncestor, startNode, node2);
- }
- };
- export const clearSelection = ()=> {
- let selection = null;
- if(window.getSelection){
- selection = window.getSelection();
- } else if(document.selection){
- selection = document.selection;
- }
- if(selection){
- if(selection.empty){
- selection.empty();
- }
- if(selection.removeAllRanges){
- selection.removeAllRanges();
- }
- }
- }
|