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 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>