-
Notifications
You must be signed in to change notification settings - Fork 3
/
main.js
47 lines (41 loc) · 1.19 KB
/
main.js
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
$(function(){
var $xpath = $("#xpath");
var $input = $("#input");
var $output = $(".html-output");
function evalXPath() {
var $node = $($.parseXML($input.val()));
var xpathExpr = $xpath.val();
console.log('expr', xpathExpr);
return $node.xpath(xpathExpr);
}
function nodeToString(node) {
if (node.nodeType == 2)
return node.value;
if (node.nodeType == 3)
return node.wholeText;
if (node.nodeType == 8)
return "<!--" + node.textContent + "-->";
return node.outerHTML;
}
function evalXPathUpdateResult() {
var buffer = new Array();
try {
var nodes = evalXPath();
var htmlNodes = $.map(nodes, function(node){
return $("<div>").text(nodeToString(node)).addClass("node");
});
$output.addClass('text-primary');
$output.removeClass('text-danger');
$output.html(htmlNodes)
console.info('nodes', nodes);
} catch (e) {
$output.removeClass('text-primary');
$output.addClass('text-danger');
// TODO: show nicer error message
$output.html("ERROR: " + e.message)
console.error(e);
}
}
$xpath.on('keyup', evalXPathUpdateResult);
evalXPathUpdateResult();
})