mirror of
https://github.com/logseq/logseq.git
synced 2026-05-02 18:06:32 +00:00
refactor: remove web
This commit is contained in:
75
src/main/frontend/selection.js
Normal file
75
src/main/frontend/selection.js
Normal file
@@ -0,0 +1,75 @@
|
||||
// Copied from https://stackoverflow.com/a/20336116
|
||||
function isDescendant(parent, child) {
|
||||
// from http://stackoverflow.com/questions/2234979/how-to-check-in-javascript-if-one-element-is-a-child-of-another
|
||||
var node = child;
|
||||
while (node != null) {
|
||||
if (node == parent) {
|
||||
return true;
|
||||
}
|
||||
node = node.parentNode;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getNodesBetween(rootNode, node1, node2) {
|
||||
var resultNodes = [];
|
||||
var isBetweenNodes = false;
|
||||
for (var 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 var getSelectedNodes = function (selectionAncestor, startNode) {
|
||||
// from https://developer.mozilla.org/en-US/docs/Web/API/Selection
|
||||
var selection = null;
|
||||
if(window.getSelection){
|
||||
selection = window.getSelection();
|
||||
} else if(document.selection){
|
||||
selection = document.selection;
|
||||
}
|
||||
|
||||
if(selection) {
|
||||
if (selection.isCollapsed) {
|
||||
return [];
|
||||
};
|
||||
var node2 = selection.focusNode;
|
||||
return getNodesBetween(selectionAncestor, startNode, node2);
|
||||
}
|
||||
};
|
||||
|
||||
export var clearSelection = function () {
|
||||
var 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user