aboutsummaryrefslogtreecommitdiffstats
path: root/xpathBlink.js
blob: a55c997f0730e8e7a9907f8ff3f91916710ce379 (plain)
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
/**
 * For vimperator 0.5.3
 * @author teramako teramako@gmail.com
 */
(function(){
const Cc = Components.classes;
const Ci = Components.interfaces;
var flasher = null;
function getFlasher(){
	if (!flasher){
		flasher = Cc['@mozilla.org/inspector/flasher;1'].createInstance(Ci.inIFlasher);
		flasher.color = '#FF0000';
		flasher.thickness = 2;
	}
	return flasher;
}
/**
 * @param {Node} aNode
 */
function blink(aNode){
	if (aNode.nodeType == 3) aNode = aNode.parentNode;
	var toggle = true;
	var flasher = getFlasher();
	function setOutline(){
		if(toggle){
			flasher.drawElementOutline(aNode);
		}else {
			flasher.repaintElement(aNode);
		}
		toggle = !toggle;
	}
	for (var i=1; i<7; ++i){
		setTimeout(setOutline, i * 100);
	}
}
vimperator.commands.add(new vimperator.Command(['xpathb[link]','xb'],
	function(expression){
		var result
		try {
			result = vimperator.buffer.evaluateXPath(expression);
		} catch(e) {
			vimperator.echoerr('XPath blink: ' + e);
		}
		if (!result.snapshotLength){
			vimperator.echo('XPath blink: none');
			return;
		}
		for (var i=0; i<result.snapshotLength; i++){
			blink(result.snapshotItem(i));
		}
	},{
		usage: ['xpathb[link] [EXPRESSION]','xb [EXPERSSION]'],
		shortHelp: 'XPath blink nodes',
		help: 'Search nodes with XPath [EXPRESSION] and blink the nodes'
	}
));
})();

// vim: set fdm=marker sw=4 ts=4 et: