-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathselection.js
More file actions
69 lines (59 loc) · 2.03 KB
/
selection.js
File metadata and controls
69 lines (59 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.method == "getSelection")
sendResponse({data: window.getSelection().toString()});
else if (request.method == "replaceSelection")
sendResponse({data: window.replaceSelection(request.selectedText, request.processedText)});
else if (request.method == "decryptSelection")
sendResponse({data: window.decryptSelection(request.selectedText, request.processedText)});
else
sendResponse({}); // snub them.
});
jQuery.fn.textWalk = function( fn ) {
this.contents().each( jwalk );
function jwalk() {
var nn = this.nodeName.toLowerCase();
if( nn === '#text') {
fn.call( this );
} else if( this.nodeType === 1 && this.childNodes && this.childNodes[0] && nn !== 'script' && nn !== 'textarea' ) {
jQuery(this).contents().each( jwalk );
}
}
return this;
};
function getSelectedNode() {
if (document.selection)
return document.selection.createRange().parentElement();
else {
var selection = window.getSelection();
var node;
if (selection.rangeCount > 0) {
node = selection.getRangeAt(0).startContainer.childNodes[0];
if (node && jQuery(node).is('input')) {
return node;
} else {
node = selection.getRangeAt(0).startContainer.parentNode;
if (node && jQuery(node).is('input')) {
return node;
} else {
return node;
}
}
}
}
}
function replaceSelection(selectedText, processedText) {
var node = window.getSelectedNode();
var $node = jQuery(node);
$node.textWalk(function() {
this.data = this.data.replace(selectedText, processedText);
});
$node.val(processedText);
}
function decryptSelection(selectedText, processedText) {
var node = window.getSelectedNode();
var $node = jQuery(node);
$node.textWalk(function() {
this.data = this.data.replace(selectedText, processedText);
});
$node.val(processedText);
}