screw_server 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.run.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- screw_server (0.1.3)
5
- bundler (= 1.0.7)
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)
@@ -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) + 1;
53
- var character = parseInt(e.character, 10) + 1;
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&nbsp;<a href="http://javascript.crockford.com/">JavaScript</a>&nbsp;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>&nbsp;
142
+ <a href="#JSLINT_OPTIONS">Set the options.</a>&nbsp;
143
+ <a href="http://www.amazon.com/exec/obidos/ASIN/0596517742/wrrrldwideweb"
144
+ target="_blank">Enjoy&nbsp;<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
+ &nbsp; &nbsp;
156
+ <input type="button" name="tree" value="Syntax Tree">
157
+ &nbsp; &nbsp;
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&nbsp;<input type="button" name="jslint" value="JSLint">&nbsp;
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
+ &nbsp; &nbsp;
174
+ <input type="button" name="tree" value="Syntax Tree">
175
+ &nbsp; &nbsp;
176
+ <input type="button" name="clear" value="clear">
177
+ &nbsp; &nbsp;
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">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
184
+ <td title="devel">Assume&nbsp;<code>console</code>,&nbsp;<code>alert</code>,&nbsp;...</td>
185
+ <td><span title="bitwise">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
186
+ <td title="bitwise">Tolerate bitwise operators</td>
187
+ <td><span title="regexp">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
188
+ <td title="regexp">Tolerate&nbsp;<tt>.</tt>&nbsp;and&nbsp;<tt>[^</tt>...<tt>]</tt>&nbsp;in&nbsp;/RegExp/</td>
189
+ </tr>
190
+ <tr>
191
+ <td><span title="browser">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
192
+ <td title="browser">Assume a browser</td>
193
+ <td><span title="confusion">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
194
+ <td title="confusion">Tolerate&nbsp;type&nbsp;confusion</td>
195
+ <td><span title="undef">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
196
+ <td title="undef">Tolerate&nbsp;misordered&nbsp;definitions</td>
197
+ </tr>
198
+ <tr>
199
+ <td><span title="node">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
200
+ <td title="node">Assume&nbsp;<a href="http://nodejs.org/">Node.js</a></td>
201
+ <td><span title="continue">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
202
+ <td title="continue">Tolerate&nbsp;<tt>continue</tt></td>
203
+ <td><span title="unparam">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
204
+ <td title="unparam">Tolerate&nbsp;unused&nbsp;parameters</td>
205
+ </tr>
206
+ <tr>
207
+ <td><span title="rhino">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
208
+ <td title="rhino">Assume&nbsp;<a href="http://www.mozilla.org/rhino/">Rhino</a></td>
209
+ <td><span title="debug">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
210
+ <td title="debug">Tolerate&nbsp;<tt>debugger</tt>&nbsp;statements</td>
211
+ <td><span title="sloppy">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
212
+ <td title="sloppy">Tolerate&nbsp;missing&nbsp;<code>'use&nbsp;strict'</code>&nbsp;pragma</td>
213
+ </tr>
214
+ <tr>
215
+ <td><span title="widget">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
216
+ <td title="widget">Assume a&nbsp;<a href="http://widgets.yahoo.com/tools/">Yahoo Widget</a></td>
217
+ <td><span title="eqeq">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
218
+ <td title="eqeq">Tolerate <code>==</code> and <code>!=</code></td>
219
+ <td><span title="sub">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
220
+ <td title="sub">Tolerate&nbsp;inefficient&nbsp;subscripting</td>
221
+ </tr>
222
+ <tr>
223
+ <td><span title="windows">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
224
+ <td title="windows">Assume&nbsp;Windows</td>
225
+ <td><span title="es5">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
226
+ <td title="es5">Tolerate&nbsp;ES5&nbsp;syntax</td>
227
+ <td><span title="vars">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
228
+ <td title="vars">Tolerate many&nbsp;<tt>var</tt>&nbsp;statements per function</td>
229
+ </tr>
230
+ <tr>
231
+ <td>&nbsp;</td>
232
+ <td>&nbsp;</td>
233
+ <td><span title="evil">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
234
+ <td title="evil">Tolerate&nbsp;<tt>eval</tt></td>
235
+ <td><span title="white">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
236
+ <td title="white">Tolerate&nbsp;messy&nbsp;white space</td>
237
+ </tr>
238
+ <tr>
239
+ <td><span title="passfail">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
240
+ <td title="passfail">Stop&nbsp;on&nbsp;first&nbsp;error</td>
241
+ <td><span title="forin">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
242
+ <td title="forin">Tolerate&nbsp;<a href="http://yuiblog.com/blog/2006/09/26/for-in-intrigue/">unfiltered</a>&nbsp;<tt>for</tt>&nbsp;<tt>in</tt></td>
243
+ <td><span title="css">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
244
+ <td title="css">Tolerate&nbsp;CSS&nbsp;workarounds</td>
245
+ </tr>
246
+ <tr>
247
+ <td>&nbsp;</td>
248
+ <td>&nbsp;</td>
249
+ <td><span title="newcap">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
250
+ <td title="newcap">Tolerate uncapitalized constructors</td>
251
+ <td><span title="cap">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
252
+ <td title="cap">Tolerate&nbsp;<tt>HTML</tt>&nbsp;case</td>
253
+ </tr>
254
+ <tr>
255
+ <td><span title="safe">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
256
+ <td title="safe">Safe&nbsp;Subset</td>
257
+ <td><span title="nomen">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
258
+ <td title="nomen">Tolerate dangling&nbsp;<tt>_</tt>&nbsp;in identifiers</td>
259
+ <td><span title="on">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
260
+ <td title="on">Tolerate&nbsp;<tt>HTML</tt>&nbsp;event handlers</td>
261
+ </tr>
262
+ <tr>
263
+ <td><span title="adsafe">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
264
+ <td title="adsafe">Verify&nbsp;<a href="http://www.ADsafe.org">ADsafe</a></td>
265
+ <td><span title="plusplus">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
266
+ <td title="plusplus">Tolerate&nbsp;<tt>++</tt>&nbsp;and&nbsp;<tt>--</tt></td>
267
+ <td><span title="fragment">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
268
+ <td title="fragment">Tolerate&nbsp;<tt>HTML</tt>&nbsp;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&nbsp;<small>(&nbsp;<code>,</code>&nbsp;separated)</small></label>&nbsp;<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&nbsp;<a href="http://www.JSLint.com/lint.html">Douglas
282
+ Crockford.</a>&nbsp;<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>