aboutsummaryrefslogtreecommitdiffstats
path: root/xpathBlink.js
blob: 8e531708aad455e38626e189765f4ae7daad846a (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
60
61
/**
 * For vimperator 0.6pre
 * @author teramako teramako@gmail.com
 *
 * Usage:
 *
 * xpath blink nodes
 * :xpathb[link] [EXPRESSION]
 * :xb [EXPERSSION]
 */
(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);
	}
}
commands.addUserCommand(['xpathb[link]','xb'],'XPath blink nodes',
	function(expression){
		var result
		try {
			result = buffer.evaluateXPath(expression.string);
		} catch(e) {
			liberator.echoerr('XPath blink: ' + e);
		}
		if (!result.snapshotLength){
			liberator.echo('XPath blink: none');
			return;
		}
		for (var i=0; i<result.snapshotLength; i++){
			blink(result.snapshotItem(i));
		}
	},{}
);
})();

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