screw_server 0.1.4 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.run.lock +2 -10
- data/assets/screw-jslint.js +2 -2
- data/assets/vendor/jslint/README +41 -0
- data/assets/vendor/jslint/init_ui.js +178 -0
- data/assets/vendor/jslint/intercept.js +98 -0
- data/assets/vendor/jslint/jslint.html +309 -0
- data/assets/vendor/jslint/jslint.js +6945 -0
- data/assets/vendor/jslint/lint.html +765 -0
- data/bin/screw_server +1 -1
- data/lib/screw_server/app.rb +3 -2
- data/lib/screw_server/jslint_suite.rb +8 -9
- data/lib/screw_server/spec_file.rb +3 -2
- data/screw_server.gemspec +3 -3
- data/views/run_spec.haml +1 -0
- metadata +15 -10
- data/assets/vendor/fulljslint.js +0 -5699
data/Gemfile.run.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
screw_server (0.1.
|
5
|
-
bundler (= 1.0.
|
4
|
+
screw_server (0.1.6)
|
5
|
+
bundler (= 1.0.21)
|
6
6
|
daemons (= 1.0.10)
|
7
7
|
eventmachine (= 0.12.6)
|
8
8
|
haml (= 3.0.13)
|
@@ -30,12 +30,4 @@ PLATFORMS
|
|
30
30
|
ruby
|
31
31
|
|
32
32
|
DEPENDENCIES
|
33
|
-
bundler (= 1.0.7)
|
34
|
-
daemons (= 1.0.10)
|
35
|
-
eventmachine (= 0.12.6)
|
36
|
-
haml (= 3.0.13)
|
37
|
-
json (= 1.4.3)
|
38
|
-
rack (= 1.1.0)
|
39
33
|
screw_server!
|
40
|
-
sinatra (= 1.0)
|
41
|
-
thin (= 1.2.7)
|
data/assets/screw-jslint.js
CHANGED
@@ -49,8 +49,8 @@ if (Screw.jslint_suites.length > 0) {
|
|
49
49
|
for (var i = 0; i < JSLINT.errors.length; i += 1) {
|
50
50
|
var e = JSLINT.errors[i];
|
51
51
|
if (e) {
|
52
|
-
var line = parseInt(e.line, 10)
|
53
|
-
var character = parseInt(e.character, 10)
|
52
|
+
var line = parseInt(e.line, 10);
|
53
|
+
var character = parseInt(e.character, 10);
|
54
54
|
message += 'Lint at ' + name + ":" + line + ' character ' +
|
55
55
|
character + ': ' + e.reason + "\n";
|
56
56
|
message += (e.evidence || '').
|
@@ -0,0 +1,41 @@
|
|
1
|
+
JSLint, The JavaScript Code Quality Tool
|
2
|
+
|
3
|
+
Douglas Crockford
|
4
|
+
douglas@crockford.com
|
5
|
+
|
6
|
+
2011-04-17
|
7
|
+
|
8
|
+
jslint.js contains the fully commented JSLINT function.
|
9
|
+
|
10
|
+
jslint.html runs the JSLINT function in a web page. The page also depends
|
11
|
+
on adsafe.js [www.ADsafe.org] and json2.js [www.JSON.org] (which are not
|
12
|
+
included in this project) and intercept.js and init_ui.js (which are). The
|
13
|
+
js files should all be minified, and all except init_ui.js are concatenated
|
14
|
+
together to form web_jslint.js.
|
15
|
+
|
16
|
+
intercept.js augments ADsafe, giving widgets access to the clock, cookies,
|
17
|
+
and the JSLINT function.
|
18
|
+
|
19
|
+
init_ui.js hooks the HTML ui components to ADsafe.
|
20
|
+
|
21
|
+
lint.html describes JSLint's usage.
|
22
|
+
|
23
|
+
Direct questions and comments to http://tech.groups.yahoo.com/group/jslint_com/.
|
24
|
+
|
25
|
+
JSLint can be run anywhere that JavaScript (or Java) can run. See for example
|
26
|
+
http://tech.groups.yahoo.com/group/jslint_com/database?method=reportRows&tbl=1
|
27
|
+
|
28
|
+
The place to express yourself in programming is in the quality of your ideas,
|
29
|
+
and the efficiency of execution. The role of style is the same as in
|
30
|
+
literature. A great writer doesn't express himself by putting the spaces
|
31
|
+
before his commas instead of after, or by putting extra spaces inside his
|
32
|
+
parentheses. A great writer will slavishly conform to some rules of style,
|
33
|
+
and that in no way constrains his power to express himself creatively.
|
34
|
+
See for example William Strunk's The Elements of Style
|
35
|
+
[http://www.crockford.com/wrrrld/style.html].
|
36
|
+
|
37
|
+
This applies to programming as well. Conforming to a consistent style
|
38
|
+
improves readability, and frees you to express yourself in ways that matter.
|
39
|
+
JSLint here plays the part of a stern but benevolent editor, helping you to
|
40
|
+
get the style right so that you can focus your creative energy where it is
|
41
|
+
most needed.
|
@@ -0,0 +1,178 @@
|
|
1
|
+
// init_ui.js
|
2
|
+
// 2011-07-19
|
3
|
+
|
4
|
+
// This is the web browser companion to fulljslint.js. It is an ADsafe
|
5
|
+
// lib file that implements a web ui by adding behavior to the widget's
|
6
|
+
// html tags.
|
7
|
+
|
8
|
+
// It stores a function in lib.init_ui. Calling that function will
|
9
|
+
// start up the JSLint widget ui.
|
10
|
+
|
11
|
+
// option = {adsafe: true, fragment: false}
|
12
|
+
|
13
|
+
/*properties check, cookie, each, edition, get, getCheck, getTitle, getValue,
|
14
|
+
has, indent, isArray, join, jslint, length, lib, maxerr, maxlen, on,
|
15
|
+
predef, push, q, select, set, split, stringify, style, target, tree, value
|
16
|
+
*/
|
17
|
+
|
18
|
+
|
19
|
+
ADSAFE.lib("init_ui", function (lib) {
|
20
|
+
"use strict";
|
21
|
+
|
22
|
+
return function (dom) {
|
23
|
+
var table = dom.q('#JSLINT_TABLE'),
|
24
|
+
boxes = table.q('span'),
|
25
|
+
indent = dom.q('#JSLINT_INDENT'),
|
26
|
+
input = dom.q('#JSLINT_INPUT'),
|
27
|
+
jslintstring = dom.q('#JSLINT_JSLINTSTRING'),
|
28
|
+
maxerr = dom.q('#JSLINT_MAXERR'),
|
29
|
+
maxlen = dom.q('#JSLINT_MAXLEN'),
|
30
|
+
option = lib.cookie.get(),
|
31
|
+
output = dom.q('#JSLINT_OUTPUT'),
|
32
|
+
tree = dom.q('#JSLINT_TREE'),
|
33
|
+
predefined = dom.q('#JSLINT_PREDEF');
|
34
|
+
|
35
|
+
function show_jslint_control() {
|
36
|
+
|
37
|
+
// Build and display a /*jslint*/ control comment.
|
38
|
+
// The comment can be copied into a .js file.
|
39
|
+
|
40
|
+
var a = [];
|
41
|
+
|
42
|
+
boxes.each(function (bunch) {
|
43
|
+
var name = bunch.getTitle(),
|
44
|
+
value = ADSAFE.get(option, name);
|
45
|
+
if (typeof value === 'boolean') {
|
46
|
+
a.push(name + ': ' + value);
|
47
|
+
bunch.style('backgroundColor', value ? 'black' : 'white');
|
48
|
+
} else {
|
49
|
+
bunch.style('backgroundColor', 'gainsboro');
|
50
|
+
}
|
51
|
+
});
|
52
|
+
if (typeof option.maxerr === 'number' && option.maxerr >= 0) {
|
53
|
+
a.push('maxerr: ' + String(option.maxerr));
|
54
|
+
}
|
55
|
+
if (typeof option.maxlen === 'number' && option.maxlen >= 0) {
|
56
|
+
a.push('maxlen: ' + String(option.maxlen));
|
57
|
+
}
|
58
|
+
if (typeof option.indent === 'number' && option.indent >= 0) {
|
59
|
+
a.push('indent: ' + String(option.indent));
|
60
|
+
}
|
61
|
+
jslintstring.value('/*jslint ' + a.join(', ') + ' */');
|
62
|
+
|
63
|
+
// Make a JSON cookie of the option object.
|
64
|
+
|
65
|
+
lib.cookie.set(option);
|
66
|
+
}
|
67
|
+
|
68
|
+
function show_options() {
|
69
|
+
indent.value(String(option.indent));
|
70
|
+
maxlen.value(String(option.maxlen || ''));
|
71
|
+
maxerr.value(String(option.maxerr));
|
72
|
+
predefined.value(ADSAFE.isArray(option.predef) ? option.predef.join(',') : '');
|
73
|
+
show_jslint_control();
|
74
|
+
}
|
75
|
+
|
76
|
+
function update_box(event) {
|
77
|
+
|
78
|
+
// Boxes are tristate, cycling true, false, undefined.
|
79
|
+
|
80
|
+
var title = event.target.getTitle();
|
81
|
+
if (title) {
|
82
|
+
ADSAFE.set(option, title,
|
83
|
+
ADSAFE.get(option, title) === true ? false :
|
84
|
+
ADSAFE.get(option, title) === false ? undefined : true);
|
85
|
+
}
|
86
|
+
show_jslint_control();
|
87
|
+
}
|
88
|
+
|
89
|
+
function update_number(event) {
|
90
|
+
var value = event.target.getValue();
|
91
|
+
if (value.length === 0 || +value < 0 || !isFinite(value)) {
|
92
|
+
value = '';
|
93
|
+
ADSAFE.set(option, event.target.getTitle(), undefined);
|
94
|
+
} else {
|
95
|
+
ADSAFE.set(option, event.target.getTitle(), +value);
|
96
|
+
}
|
97
|
+
event.target.value(String(value));
|
98
|
+
show_jslint_control();
|
99
|
+
}
|
100
|
+
|
101
|
+
function update_list(event) {
|
102
|
+
var value = event.target.getValue().split(/\s*,\s*/);
|
103
|
+
ADSAFE.set(option, event.target.getTitle(), value);
|
104
|
+
event.target.value(value.join(', '));
|
105
|
+
show_jslint_control();
|
106
|
+
}
|
107
|
+
|
108
|
+
|
109
|
+
// Restore the options from a JSON cookie.
|
110
|
+
|
111
|
+
if (!option || typeof option !== 'object') {
|
112
|
+
option = {
|
113
|
+
indent: 4,
|
114
|
+
maxerr: 50
|
115
|
+
};
|
116
|
+
} else {
|
117
|
+
option.indent =
|
118
|
+
typeof option.indent === 'number' && option.indent >= 0 ?
|
119
|
+
option.indent : 4;
|
120
|
+
option.maxerr =
|
121
|
+
typeof option.maxerr === 'number' && option.maxerr >= 0 ?
|
122
|
+
option.maxerr : 50;
|
123
|
+
}
|
124
|
+
show_options();
|
125
|
+
|
126
|
+
|
127
|
+
// Display the edition.
|
128
|
+
|
129
|
+
dom.q('#JSLINT_EDITION').value('Edition ' + lib.edition());
|
130
|
+
|
131
|
+
// Add click event handlers to the [JSLint] and [clear] buttons.
|
132
|
+
|
133
|
+
dom.q('input&jslint').on('click', function () {
|
134
|
+
tree.value('');
|
135
|
+
|
136
|
+
// Call JSLint and display the report.
|
137
|
+
|
138
|
+
tree.value(String(lib.jslint(input.getValue(), option, output) / 1000) + ' seconds.');
|
139
|
+
input.select();
|
140
|
+
return false;
|
141
|
+
});
|
142
|
+
|
143
|
+
dom.q('input&tree').on('click', function () {
|
144
|
+
output.value('Tree:');
|
145
|
+
tree.value(JSON.stringify(lib.tree(), [
|
146
|
+
'label', 'id', 'string', 'number', 'arity', 'name', 'first',
|
147
|
+
'second', 'third', 'block', 'else', 'quote', 'type'
|
148
|
+
], 4));
|
149
|
+
input.select();
|
150
|
+
});
|
151
|
+
|
152
|
+
dom.q('input&clear').on('click', function () {
|
153
|
+
output.value('');
|
154
|
+
tree.value('');
|
155
|
+
input.value('').select();
|
156
|
+
});
|
157
|
+
|
158
|
+
|
159
|
+
dom.q('#JSLINT_CLEARALL').on('click', function () {
|
160
|
+
option = {
|
161
|
+
indent: 4,
|
162
|
+
maxerr: 50
|
163
|
+
};
|
164
|
+
show_options();
|
165
|
+
});
|
166
|
+
|
167
|
+
table.on('click', update_box);
|
168
|
+
indent.on('change', update_number);
|
169
|
+
maxerr.on('change', update_number);
|
170
|
+
maxlen.on('change', update_number);
|
171
|
+
predefined.on('change', update_list);
|
172
|
+
input
|
173
|
+
.on('change', function () {
|
174
|
+
output.value('');
|
175
|
+
})
|
176
|
+
.select();
|
177
|
+
};
|
178
|
+
});
|
@@ -0,0 +1,98 @@
|
|
1
|
+
// intercept.js
|
2
|
+
// 2011-06-13
|
3
|
+
|
4
|
+
// This file makes it possible for JSLint to run as an ADsafe widget by
|
5
|
+
// adding lib features.
|
6
|
+
|
7
|
+
// It provides a JSON cookie facility. Each widget is allowed to create a
|
8
|
+
// single JSON cookie.
|
9
|
+
|
10
|
+
// It also provides a way for the widget to call JSLint. The widget cannot
|
11
|
+
// call JSLint directly because it is loaded as a global variable. I don't
|
12
|
+
// want to change that because other versions of JSLint depend on that.
|
13
|
+
|
14
|
+
// And it provides access to the syntax tree that JSLint constructed.
|
15
|
+
|
16
|
+
/*jslint nomen: true, unparam: true */
|
17
|
+
|
18
|
+
/*global ADSAFE, document, JSLINT */
|
19
|
+
|
20
|
+
/*properties ___nodes___, _intercept, cookie, edition, get, getTime,
|
21
|
+
indexOf, innerHTML, jslint, length, now, parse, replace, report, set,
|
22
|
+
setTime, slice, stringify, toGMTString, tree
|
23
|
+
*/
|
24
|
+
|
25
|
+
ADSAFE._intercept(function (id, dom, lib, bunch) {
|
26
|
+
"use strict";
|
27
|
+
|
28
|
+
// Give every widget access to a JSON cookie. The name of the cookie will be
|
29
|
+
// the same as the id of the widget.
|
30
|
+
|
31
|
+
lib.cookie = {
|
32
|
+
get: function () {
|
33
|
+
|
34
|
+
// Get the raw cookie. Extract this widget's cookie, and parse it.
|
35
|
+
|
36
|
+
var c = ' ' + document.cookie + ';',
|
37
|
+
s = c.indexOf((' ' + id + '=')),
|
38
|
+
v;
|
39
|
+
try {
|
40
|
+
if (s >= 0) {
|
41
|
+
s += id.length + 2;
|
42
|
+
v = JSON.parse(c.slice(s, c.indexOf(';', s)));
|
43
|
+
}
|
44
|
+
} catch (ignore) {}
|
45
|
+
return v;
|
46
|
+
},
|
47
|
+
set: function (value) {
|
48
|
+
|
49
|
+
// Set a cookie. It must be under 2000 in length. Escapify equal sign
|
50
|
+
// and semicolon if necessary.
|
51
|
+
|
52
|
+
var d,
|
53
|
+
j = JSON.stringify(value)
|
54
|
+
.replace(/[=]/g, '\\u003d')
|
55
|
+
.replace(/[;]/g, '\\u003b');
|
56
|
+
|
57
|
+
if (j.length < 2000) {
|
58
|
+
d = new Date();
|
59
|
+
d.setTime(d.getTime() + 1e9);
|
60
|
+
document.cookie = id + "=" + j + ';expires=' + d.toGMTString();
|
61
|
+
}
|
62
|
+
}
|
63
|
+
};
|
64
|
+
});
|
65
|
+
|
66
|
+
ADSAFE._intercept(function (id, dom, lib, bunch) {
|
67
|
+
"use strict";
|
68
|
+
|
69
|
+
// Give only the JSLINT_ widget access to the JSLINT function.
|
70
|
+
// We add a jslint function to its lib that calls JSLINT and
|
71
|
+
// then calls JSLINT.report, and stuffs the html result into
|
72
|
+
// a node provided by the widget. A widget does not get direct
|
73
|
+
// access to nodes.
|
74
|
+
|
75
|
+
// We also add an edition function to the lib that gives the
|
76
|
+
// widget access to the current edition string.
|
77
|
+
|
78
|
+
var now = Date.now || function () {
|
79
|
+
return new Date().getTime();
|
80
|
+
};
|
81
|
+
if (id === 'JSLINT_') {
|
82
|
+
lib.jslint = function (source, options, output) {
|
83
|
+
output.___nodes___[0].innerHTML = "Working.";
|
84
|
+
var after, report, before = now();
|
85
|
+
JSLINT(source, options);
|
86
|
+
report = JSLINT.report();
|
87
|
+
after = now();
|
88
|
+
output.___nodes___[0].innerHTML = report;
|
89
|
+
return after - before;
|
90
|
+
};
|
91
|
+
lib.edition = function () {
|
92
|
+
return JSLINT.edition;
|
93
|
+
};
|
94
|
+
lib.tree = function () {
|
95
|
+
return JSLINT.tree;
|
96
|
+
};
|
97
|
+
}
|
98
|
+
});
|
@@ -0,0 +1,309 @@
|
|
1
|
+
<html>
|
2
|
+
<head><title>JSLint, The JavaScript Code Quality Tool</title>
|
3
|
+
<link rel="icon" type="image/gif" href="http://www.JSLint.com/favicon.gif">
|
4
|
+
<style>
|
5
|
+
#JSLINT_TABLE td span {
|
6
|
+
border: 2px solid black;
|
7
|
+
}
|
8
|
+
table {
|
9
|
+
cursor: pointer;
|
10
|
+
}
|
11
|
+
i {
|
12
|
+
font-family: serif;
|
13
|
+
font-style: italic;
|
14
|
+
}
|
15
|
+
p {
|
16
|
+
padding-left: 10pt;
|
17
|
+
}
|
18
|
+
input[type="button"] {
|
19
|
+
background-color: navajowhite;
|
20
|
+
border: 2px solid black;
|
21
|
+
color: black;
|
22
|
+
}
|
23
|
+
input[type="button"]:hover {
|
24
|
+
background-color: lightsteelblue;
|
25
|
+
text-decoration: underline;
|
26
|
+
}
|
27
|
+
input[type="button"]:active {
|
28
|
+
background-color: indianred;
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
|
32
|
+
input[type="text"] {
|
33
|
+
border: 2px solid black;
|
34
|
+
text-align: center;
|
35
|
+
}
|
36
|
+
|
37
|
+
a:link {
|
38
|
+
color: darkblue;
|
39
|
+
}
|
40
|
+
a:visited {
|
41
|
+
color: purple;
|
42
|
+
}
|
43
|
+
a:hover {
|
44
|
+
color: blue;
|
45
|
+
}
|
46
|
+
a:active {
|
47
|
+
color: red;
|
48
|
+
}
|
49
|
+
body {
|
50
|
+
background-color: gainsboro;
|
51
|
+
padding-left: 5%;
|
52
|
+
padding-right: 5%;
|
53
|
+
text-align: center;
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
.leftcolumn {
|
58
|
+
float: left;
|
59
|
+
margin: 1em;
|
60
|
+
}
|
61
|
+
|
62
|
+
#errors {
|
63
|
+
margin: 1em;
|
64
|
+
border: 2px solid black;
|
65
|
+
padding: 1em;
|
66
|
+
background-color: mistyrose;
|
67
|
+
}
|
68
|
+
#errors p {
|
69
|
+
margin-left: 2em;
|
70
|
+
}
|
71
|
+
#errors p.evidence {
|
72
|
+
margin-left: 0;
|
73
|
+
font-family: monospace;
|
74
|
+
}
|
75
|
+
|
76
|
+
#functions {
|
77
|
+
background-color: white;
|
78
|
+
}
|
79
|
+
#members {
|
80
|
+
background-color: peachpuff;
|
81
|
+
}
|
82
|
+
|
83
|
+
#functions, #members {
|
84
|
+
border: 2px solid black;
|
85
|
+
font-family: monospace;
|
86
|
+
margin: 1em;
|
87
|
+
padding: 1em;
|
88
|
+
}
|
89
|
+
#functions div {
|
90
|
+
margin-left: 10em;
|
91
|
+
text-indent: -5em;
|
92
|
+
}
|
93
|
+
#functions div.function {
|
94
|
+
margin-left: 0;
|
95
|
+
text-indent: 0;
|
96
|
+
}
|
97
|
+
|
98
|
+
#JSLINT_OUTPUT {
|
99
|
+
text-align: left;
|
100
|
+
}
|
101
|
+
|
102
|
+
#JSLINT_INPUT{
|
103
|
+
border: 2px solid black;
|
104
|
+
color: black;
|
105
|
+
font-family: monospace;
|
106
|
+
height: 3in;
|
107
|
+
overflow: auto;
|
108
|
+
padding: 0.5em;
|
109
|
+
width: 100%;
|
110
|
+
}
|
111
|
+
|
112
|
+
#JSLINT_JSLINTSTRING {
|
113
|
+
background-color: peachpuff;
|
114
|
+
border: 2px solid black;
|
115
|
+
font-family: monospace;
|
116
|
+
margin: 1em;
|
117
|
+
padding: 1em;
|
118
|
+
}
|
119
|
+
|
120
|
+
#JSLINT_OPTIONS {
|
121
|
+
border: 2px solid black;
|
122
|
+
color: black;
|
123
|
+
margin: 1em;
|
124
|
+
padding: 8px;
|
125
|
+
text-align: left;
|
126
|
+
background-color: linen;
|
127
|
+
}
|
128
|
+
|
129
|
+
#JSLINT_TREE, #JSLINT_FIELDS {
|
130
|
+
text-align: left;
|
131
|
+
}
|
132
|
+
</style></head>
|
133
|
+
<body>
|
134
|
+
<table border="0" cols="2"><tbody>
|
135
|
+
<tr>
|
136
|
+
<td><img src="jslint.gif" width="383" height="120" alt="JSLint"> </td>
|
137
|
+
<td valign="middle" align="left">
|
138
|
+
<p><big>The <a href="http://javascript.crockford.com/">JavaScript</a> Code Quality Tool</big></p>
|
139
|
+
<p id=JSLINT_EDITION></p>
|
140
|
+
<p>
|
141
|
+
<a href="http://www.JSLint.com/lint.html">Read the instructions.</a>
|
142
|
+
<a href="#JSLINT_OPTIONS">Set the options.</a>
|
143
|
+
<a href="http://www.amazon.com/exec/obidos/ASIN/0596517742/wrrrldwideweb"
|
144
|
+
target="_blank">Enjoy <i>The Good Parts</i>.</a></p>
|
145
|
+
</td></tr></tbody></table>
|
146
|
+
<script src="web_jslint.js">
|
147
|
+
// json2.js+jslint.js+adsafe.js+intercept.js
|
148
|
+
</script>
|
149
|
+
|
150
|
+
<div id="JSLINT_">
|
151
|
+
|
152
|
+
<p style="background-color: transparent;"><textarea id="JSLINT_INPUT"></textarea></p>
|
153
|
+
<p>
|
154
|
+
<input type="button" name="jslint" value="JSLint">
|
155
|
+
|
156
|
+
<input type="button" name="tree" value="Syntax Tree">
|
157
|
+
|
158
|
+
<input type="button" name="clear" value="clear">
|
159
|
+
</p>
|
160
|
+
<div id="JSLINT_OUTPUT">
|
161
|
+
|
162
|
+
<div style="text-align: center;">Paste your program into the text box
|
163
|
+
above and click a <input type="button" name="jslint" value="JSLint">
|
164
|
+
button.</div>
|
165
|
+
<div style="text-align: center; margin: 1em; border: 2px solid black; padding: 1em; background-color: papayawhip;">
|
166
|
+
I love JSLint. It has caught more errors of inadvertence than I can count.<br><i>L Peter Deutsch</i>
|
167
|
+
|
168
|
+
</div>
|
169
|
+
</div>
|
170
|
+
<pre id="JSLINT_TREE"></pre>
|
171
|
+
<p>
|
172
|
+
<input type="button" name="jslint" value="JSLint">
|
173
|
+
|
174
|
+
<input type="button" name="tree" value="Syntax Tree">
|
175
|
+
|
176
|
+
<input type="button" name="clear" value="clear">
|
177
|
+
|
178
|
+
<input type="button" id="JSLINT_CLEARALL" value="Clear All Options">
|
179
|
+
</p>
|
180
|
+
<p id="JSLINT_OPTIONS">
|
181
|
+
<table id="JSLINT_TABLE" border="0">
|
182
|
+
<tr>
|
183
|
+
<td><span title="devel"> </span></td>
|
184
|
+
<td title="devel">Assume <code>console</code>, <code>alert</code>, ...</td>
|
185
|
+
<td><span title="bitwise"> </span></td>
|
186
|
+
<td title="bitwise">Tolerate bitwise operators</td>
|
187
|
+
<td><span title="regexp"> </span></td>
|
188
|
+
<td title="regexp">Tolerate <tt>.</tt> and <tt>[^</tt>...<tt>]</tt> in /RegExp/</td>
|
189
|
+
</tr>
|
190
|
+
<tr>
|
191
|
+
<td><span title="browser"> </span></td>
|
192
|
+
<td title="browser">Assume a browser</td>
|
193
|
+
<td><span title="confusion"> </span></td>
|
194
|
+
<td title="confusion">Tolerate type confusion</td>
|
195
|
+
<td><span title="undef"> </span></td>
|
196
|
+
<td title="undef">Tolerate misordered definitions</td>
|
197
|
+
</tr>
|
198
|
+
<tr>
|
199
|
+
<td><span title="node"> </span></td>
|
200
|
+
<td title="node">Assume <a href="http://nodejs.org/">Node.js</a></td>
|
201
|
+
<td><span title="continue"> </span></td>
|
202
|
+
<td title="continue">Tolerate <tt>continue</tt></td>
|
203
|
+
<td><span title="unparam"> </span></td>
|
204
|
+
<td title="unparam">Tolerate unused parameters</td>
|
205
|
+
</tr>
|
206
|
+
<tr>
|
207
|
+
<td><span title="rhino"> </span></td>
|
208
|
+
<td title="rhino">Assume <a href="http://www.mozilla.org/rhino/">Rhino</a></td>
|
209
|
+
<td><span title="debug"> </span></td>
|
210
|
+
<td title="debug">Tolerate <tt>debugger</tt> statements</td>
|
211
|
+
<td><span title="sloppy"> </span></td>
|
212
|
+
<td title="sloppy">Tolerate missing <code>'use strict'</code> pragma</td>
|
213
|
+
</tr>
|
214
|
+
<tr>
|
215
|
+
<td><span title="widget"> </span></td>
|
216
|
+
<td title="widget">Assume a <a href="http://widgets.yahoo.com/tools/">Yahoo Widget</a></td>
|
217
|
+
<td><span title="eqeq"> </span></td>
|
218
|
+
<td title="eqeq">Tolerate <code>==</code> and <code>!=</code></td>
|
219
|
+
<td><span title="sub"> </span></td>
|
220
|
+
<td title="sub">Tolerate inefficient subscripting</td>
|
221
|
+
</tr>
|
222
|
+
<tr>
|
223
|
+
<td><span title="windows"> </span></td>
|
224
|
+
<td title="windows">Assume Windows</td>
|
225
|
+
<td><span title="es5"> </span></td>
|
226
|
+
<td title="es5">Tolerate ES5 syntax</td>
|
227
|
+
<td><span title="vars"> </span></td>
|
228
|
+
<td title="vars">Tolerate many <tt>var</tt> statements per function</td>
|
229
|
+
</tr>
|
230
|
+
<tr>
|
231
|
+
<td> </td>
|
232
|
+
<td> </td>
|
233
|
+
<td><span title="evil"> </span></td>
|
234
|
+
<td title="evil">Tolerate <tt>eval</tt></td>
|
235
|
+
<td><span title="white"> </span></td>
|
236
|
+
<td title="white">Tolerate messy white space</td>
|
237
|
+
</tr>
|
238
|
+
<tr>
|
239
|
+
<td><span title="passfail"> </span></td>
|
240
|
+
<td title="passfail">Stop on first error</td>
|
241
|
+
<td><span title="forin"> </span></td>
|
242
|
+
<td title="forin">Tolerate <a href="http://yuiblog.com/blog/2006/09/26/for-in-intrigue/">unfiltered</a> <tt>for</tt> <tt>in</tt></td>
|
243
|
+
<td><span title="css"> </span></td>
|
244
|
+
<td title="css">Tolerate CSS workarounds</td>
|
245
|
+
</tr>
|
246
|
+
<tr>
|
247
|
+
<td> </td>
|
248
|
+
<td> </td>
|
249
|
+
<td><span title="newcap"> </span></td>
|
250
|
+
<td title="newcap">Tolerate uncapitalized constructors</td>
|
251
|
+
<td><span title="cap"> </span></td>
|
252
|
+
<td title="cap">Tolerate <tt>HTML</tt> case</td>
|
253
|
+
</tr>
|
254
|
+
<tr>
|
255
|
+
<td><span title="safe"> </span></td>
|
256
|
+
<td title="safe">Safe Subset</td>
|
257
|
+
<td><span title="nomen"> </span></td>
|
258
|
+
<td title="nomen">Tolerate dangling <tt>_</tt> in identifiers</td>
|
259
|
+
<td><span title="on"> </span></td>
|
260
|
+
<td title="on">Tolerate <tt>HTML</tt> event handlers</td>
|
261
|
+
</tr>
|
262
|
+
<tr>
|
263
|
+
<td><span title="adsafe"> </span></td>
|
264
|
+
<td title="adsafe">Verify <a href="http://www.ADsafe.org">ADsafe</a></td>
|
265
|
+
<td><span title="plusplus"> </span></td>
|
266
|
+
<td title="plusplus">Tolerate <tt>++</tt> and <tt>--</tt></td>
|
267
|
+
<td><span title="fragment"> </span></td>
|
268
|
+
<td title="fragment">Tolerate <tt>HTML</tt> fragments</td>
|
269
|
+
</tr>
|
270
|
+
</table>
|
271
|
+
<p><br clear=all>
|
272
|
+
</p>
|
273
|
+
<div id=JSLINT_FIELDS>
|
274
|
+
<input id="JSLINT_INDENT" type="text" size="2" title="indent" value="" autocomplete=off> <label for="JSLINT_INDENT" title="indent">Indentation</label><br>
|
275
|
+
<input id="JSLINT_MAXLEN" type="text" size="2" title="maxlen" value="" autocomplete=off> <label for="JSLINT_MAXLEN" title="maxlen">Maximum line length</label><br>
|
276
|
+
<input id="JSLINT_MAXERR" type="text" size="2" title="maxerr" value="" autocomplete=off> <label for="JSLINT_MAXERR" title="maxerr">Maximum number of errors</label><br>
|
277
|
+
<label title=predef for="JSLINT_PREDEF">Predefined <small>( <code>,</code> separated)</small></label> <input id="JSLINT_PREDEF" type="text" size="72" autocomplete=off title=predef>
|
278
|
+
</div>
|
279
|
+
</p>
|
280
|
+
<p id="JSLINT_JSLINTSTRING"></p>
|
281
|
+
<p> Copyright 2002 <a href="http://www.JSLint.com/lint.html">Douglas
|
282
|
+
Crockford.</a> <a target="_blank" href="http://www.crockford.com/">All
|
283
|
+
Rights Reserved Wrrrldwide and Beyond!</a> <br>
|
284
|
+
<a href="http://javascript.crockford.com/code.html" target="_blank">Code
|
285
|
+
Conventions for the JavaScript Programming Language.</a><br>
|
286
|
+
<a href="http://tech.groups.yahoo.com/group/jslint_com/" target="_blank">Join
|
287
|
+
the JSLint Group.</a> </p>
|
288
|
+
<script>
|
289
|
+
ADSAFE.id("JSLINT_");
|
290
|
+
</script>
|
291
|
+
|
292
|
+
<script src="init_ui.js"></script>
|
293
|
+
|
294
|
+
<script>
|
295
|
+
ADSAFE.go("JSLINT_", function (dom, lib) {
|
296
|
+
"use strict";
|
297
|
+
lib.init_ui(dom);
|
298
|
+
});
|
299
|
+
</script>
|
300
|
+
|
301
|
+
</div>
|
302
|
+
|
303
|
+
<a href="http://www.JSLint.com/"><img src="jslintpill.gif" width="36" height="17" border="0"></a>
|
304
|
+
<a href="http://tech.groups.yahoo.com/group/jslint_com/"><img src="y.gif" width="31" height="17" border="0"></a>
|
305
|
+
<a href="https://github.com/douglascrockford/JSLint"><img src="github.gif" width="39" height="16" border="0"></a>
|
306
|
+
<a href="http://www.ADsafe.org/"><img src="adsafepill.gif" width="36" height="17" border="0"></a>
|
307
|
+
<a href="http://www.JSON.org/"><img src="jsonpill.gif" width="36" height="17" border="0"></a>
|
308
|
+
<a href="http://www.1and1.com/?k_id=10219574"><img src="1and1pill.gif" width="36" height="17" border="0"></a>
|
309
|
+
</body></html>
|