Skip to content

Commit b61b064

Browse files
committed
Merge branch 'master' into harmony
2 parents e914951 + 377bebd commit b61b064

File tree

7 files changed

+505
-322
lines changed

7 files changed

+505
-322
lines changed

demo/validate.html

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Esprima: Syntax Validator</title>
6+
<script src="../test/3rdparty/platform.js"></script>
7+
<script src="checkenv.js"></script>
8+
<script src="../esprima.js"></script>
9+
<script src="../assets/codemirror/codemirror.js"></script>
10+
<script src="../assets/codemirror/javascript.js"></script>
11+
<link rel="stylesheet" type="text/css" href="../assets/codemirror/codemirror.css"/>
12+
<link rel="stylesheet" type="text/css" href="../assets/style.css"/>
13+
<style>
14+
table th, table td {
15+
text-align: left;
16+
background-color: white;
17+
}
18+
19+
tbody tr:nth-child(odd) td {
20+
background-color: white;
21+
}
22+
23+
tbody td {
24+
background-color: white;
25+
}
26+
</style>
27+
</head>
28+
<body>
29+
<div class="container">
30+
31+
<div class="topbar">
32+
<ul class="nav">
33+
<li><a href="../index.html">&larr; Home</a></li>
34+
<li><a href="http://github.com/ariya/esprima">Code</a></li>
35+
<li><a href="../doc/index.html">Documentation</a></li>
36+
<li><a href="http://issues.esprima.org">Issues</a></li>
37+
</ul>
38+
</div>
39+
40+
<h1>Syntax Validator <small>checks for mistakes and errors</small></h1>
41+
42+
<p>Esprima version <span id="version"></span>.</p>
43+
44+
<p>Type ECMAScript code:</p>
45+
<p><textarea id="code" autofocus="autofocus" cols="70" rows="15" spellcheck="false">
46+
return 42; // Return statement not inside a function
47+
48+
function f() {
49+
'use strict';
50+
51+
// No more octal
52+
var x = 042;
53+
54+
// Duplicate property
55+
var y = { x: 1, x: 2 };
56+
57+
// With statement can't be used
58+
with (z) {}
59+
60+
}
61+
</textarea></p>
62+
<p id="codemirror" align="right"><small>The above code editor is based on <a href="http://codemirror.net" target="_blank">CodeMirror</a>.</small></p>
63+
64+
<div id="result"><p>No result yet.</p></div>
65+
66+
<div class="footer"><strong>Esprima</strong> is created by
67+
<a href="http://ariya.ofilabs.com/about" target="_blank">Ariya Hidayat</a>. Follow <a href="http://twitter.com/ariyahidayat">@ariyahidayat</a> on Twitter.
68+
</div>
69+
70+
<p id="testbox"><textarea id="test"></textarea></p>
71+
</div>
72+
<script src="validate.js"></script>
73+
</body>
74+
</html>

demo/validate.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*jslint sloppy:true browser:true */
2+
/*global esprima:true, CodeMirror:true */
3+
var validateId;
4+
5+
function validate(delay) {
6+
if (validateId) {
7+
window.clearTimeout(validateId);
8+
}
9+
10+
validateId = window.setTimeout(function () {
11+
var code, result, i, str;
12+
13+
if (typeof window.editor === 'undefined') {
14+
code = document.getElementById('code').value;
15+
} else {
16+
code = window.editor.getValue();
17+
}
18+
19+
try {
20+
result = esprima.parse(code, { tolerant: true, loc: true }).errors;
21+
if (result.length > 0) {
22+
str = '<p>Found <b>' + result.length + '</b>:</p>';
23+
for (i = 0; i < result.length; i += 1) {
24+
str += '<p>' + result[i].message + '</p>';
25+
}
26+
} else {
27+
str = '<p>No syntax error.</p>';
28+
}
29+
} catch (e) {
30+
str = e.name + ': ' + e.message;
31+
}
32+
document.getElementById('result').innerHTML = str;
33+
34+
validateId = undefined;
35+
}, delay || 811);
36+
}
37+
38+
window.onload = function () {
39+
var id, el;
40+
41+
id = function (i) {
42+
return document.getElementById(i);
43+
};
44+
45+
el = id('version');
46+
if (typeof el.innerText === 'string') {
47+
el.innerText = esprima.version;
48+
} else {
49+
el.textContent = esprima.version;
50+
}
51+
try {
52+
validate(1);
53+
} catch (e) { }
54+
};
55+
56+
try {
57+
window.checkEnv();
58+
59+
// This is just testing, to detect whether CodeMirror would fail or not
60+
window.editor = CodeMirror.fromTextArea(document.getElementById("test"));
61+
62+
window.editor = CodeMirror.fromTextArea(document.getElementById("code"), {
63+
lineNumbers: true,
64+
matchBrackets: true,
65+
onChange: validate
66+
});
67+
} catch (e) {
68+
// CodeMirror failed to initialize, possible in e.g. old IE.
69+
document.getElementById('codemirror').innerHTML = '';
70+
document.getElementById('code').onchange = validate;
71+
document.getElementById('code').onkeydown = validate;
72+
} finally {
73+
document.getElementById('testbox').parentNode.removeChild(document.getElementById('testbox'));
74+
}

index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ <h3>Use-cases</h3>
7373
<h3>Semantic analysis</h3>
7474
<ul>
7575
<li><a href="demo/parse.html">Code parser</a></li>
76+
<li><a href="demo/validate.html">Syntax validator</a></li>
7677
<li><a href="demo/precedence.html">Operator precedence</a></li>
7778
<li><a href="demo/collector.html">Regex collector</a></li>
7879
<li><a href="demo/functiontrace.html">Function tracing</a></li>

test/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<script src="../esprima.js"></script>
88
<script src="../assets/json2.js"></script>
99
<script src="test.js"></script>
10+
<script src="runner.js"></script>
1011
</head>
1112
<body>
1213
<div class="container">

test/run.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
index;
3636

3737
suites = [
38-
'test',
38+
'runner',
3939
'compat'
4040
];
4141

0 commit comments

Comments
 (0)