js-beautify 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.document +5 -0
  2. data/.gitmodules +4 -0
  3. data/Gemfile +13 -0
  4. data/Gemfile.lock +27 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +13 -0
  7. data/Rakefile +29 -0
  8. data/VERSION +1 -0
  9. data/bin/js-beautify +5 -0
  10. data/init.sh +3 -0
  11. data/js-beautify-copy/.gitmodules +3 -0
  12. data/js-beautify-copy/Makefile +71 -0
  13. data/js-beautify-copy/README.md +39 -0
  14. data/js-beautify-copy/attic/beautify-cl/beautify-cl.js +142 -0
  15. data/js-beautify-copy/attic/bin/beautify_js +80 -0
  16. data/js-beautify-copy/attic/opera-userscript/beautifier.js +1087 -0
  17. data/js-beautify-copy/attic/opera-userscript/make_opera_userscript.sh +42 -0
  18. data/js-beautify-copy/attic/qtscript/jsbeautify.cpp +121 -0
  19. data/js-beautify-copy/attic/qtscript/jsbeautify.pro +5 -0
  20. data/js-beautify-copy/attic/qtscript/jsbeautify.qrc +6 -0
  21. data/js-beautify-copy/attic/qtscript/readme.txt +28 -0
  22. data/js-beautify-copy/attic/readme.txt +2 -0
  23. data/js-beautify-copy/attic/unmaintained/bbedit/jsBeautify_BBED.scpt +522 -0
  24. data/js-beautify-copy/attic/unmaintained/c-sharp/JSBeautify.cs +801 -0
  25. data/js-beautify-copy/attic/v8/README.txt +40 -0
  26. data/js-beautify-copy/attic/v8/beautify.h +2390 -0
  27. data/js-beautify-copy/attic/v8/jsbeautify.cpp +215 -0
  28. data/js-beautify-copy/beautify-css.js +198 -0
  29. data/js-beautify-copy/beautify-html.js +514 -0
  30. data/js-beautify-copy/beautify.js +1293 -0
  31. data/js-beautify-copy/favicon.png +0 -0
  32. data/js-beautify-copy/index.html +401 -0
  33. data/js-beautify-copy/jquery/jquery.cookie.js +96 -0
  34. data/js-beautify-copy/jquery/jquery.js +167 -0
  35. data/js-beautify-copy/license.txt +24 -0
  36. data/js-beautify-copy/php/jsbeautifier.php +1599 -0
  37. data/js-beautify-copy/php/test.php +476 -0
  38. data/js-beautify-copy/python/MANIFEST.in +2 -0
  39. data/js-beautify-copy/python/js-beautify +7 -0
  40. data/js-beautify-copy/python/js-beautify-profile +16 -0
  41. data/js-beautify-copy/python/js-beautify-test +10 -0
  42. data/js-beautify-copy/python/jsbeautifier/__init__.py +1166 -0
  43. data/js-beautify-copy/python/jsbeautifier/tests/__init__.py +1 -0
  44. data/js-beautify-copy/python/jsbeautifier/tests/testindentation.py +43 -0
  45. data/js-beautify-copy/python/jsbeautifier/tests/testjsbeautifier.py +464 -0
  46. data/js-beautify-copy/python/jsbeautifier/unpackers/README.specs.mkd +25 -0
  47. data/js-beautify-copy/python/jsbeautifier/unpackers/__init__.py +67 -0
  48. data/js-beautify-copy/python/jsbeautifier/unpackers/evalbased.py +39 -0
  49. data/js-beautify-copy/python/jsbeautifier/unpackers/javascriptobfuscator.py +58 -0
  50. data/js-beautify-copy/python/jsbeautifier/unpackers/myobfuscate.py +86 -0
  51. data/js-beautify-copy/python/jsbeautifier/unpackers/packer.py +104 -0
  52. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/__init__.py +2 -0
  53. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-myobfuscate-input.js +1 -0
  54. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-myobfuscate-output.js +65 -0
  55. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-packer-62-input.js +1 -0
  56. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-packer-non62-input.js +1 -0
  57. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testjavascriptobfuscator.py +46 -0
  58. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testmyobfuscate.py +40 -0
  59. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testpacker.py +34 -0
  60. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testurlencode.py +36 -0
  61. data/js-beautify-copy/python/jsbeautifier/unpackers/urlencode.py +34 -0
  62. data/js-beautify-copy/python/setup.py +17 -0
  63. data/js-beautify-copy/tests/beautify-tests.js +489 -0
  64. data/js-beautify-copy/tests/run-tests +17 -0
  65. data/js-beautify-copy/tests/sanitytest.js +128 -0
  66. data/js-beautify-copy/unpackers/javascriptobfuscator_unpacker.js +103 -0
  67. data/js-beautify-copy/unpackers/myobfuscate_unpacker.js +81 -0
  68. data/js-beautify-copy/unpackers/p_a_c_k_e_r_unpacker.js +61 -0
  69. data/js-beautify-copy/unpackers/urlencode_unpacker.js +51 -0
  70. data/lib/js-beautify.rb +0 -0
  71. data/test/helper.rb +18 -0
  72. data/test/test_js-beautify.rb +7 -0
  73. data/update.sh +23 -0
  74. metadata +173 -0
@@ -0,0 +1,401 @@
1
+ <!DOCTYPE html>
2
+ <!--[if lt IE 7]><html lang="en-us" class="ie6"><![endif]-->
3
+ <!--[if IE 7]><html lang="en-us" class="ie7"><![endif]-->
4
+ <!--[if IE 8]><html lang="en-us" class="ie8"><![endif]-->
5
+ <!--[if gt IE 8]><!--><html lang="en-us"><!--<![endif]-->
6
+ <head>
7
+ <meta charset="utf-8">
8
+ <title>Online JavaScript beautifier</title>
9
+ <link rel="icon" href="favicon.png" type="image/png">
10
+ <script src="third-party/codemirror2/lib/codemirror.js"></script>
11
+ <script src="third-party/codemirror2/mode/javascript/javascript.js"></script>
12
+ <link rel="stylesheet" href="third-party/codemirror2/lib/codemirror.css">
13
+
14
+ <style>
15
+ body {
16
+ background: #eee;
17
+ color: #333;
18
+ }
19
+
20
+ img {
21
+ border: 0;
22
+ }
23
+
24
+ p, select, label, .blurb {
25
+ font:13px/1.231 arial, sans-serif;
26
+ *font-size:small;
27
+ }
28
+
29
+ a {
30
+ color: #36d;
31
+ }
32
+
33
+ button#submit {
34
+ clear: both;
35
+ margin-top: 5px;
36
+ width: 100%;
37
+ padding: 10px 0;
38
+ cursor: pointer;
39
+ }
40
+
41
+ #source {
42
+ width: 100%;
43
+ padding-left: 0;
44
+ padding-right: 0;
45
+ }
46
+
47
+ button#submit em {
48
+ font-size: 11px;
49
+ font-style: normal;
50
+ color: #999;
51
+ }
52
+
53
+ label {
54
+ cursor: pointer;
55
+ }
56
+
57
+ select {
58
+ width: 220px;
59
+ }
60
+
61
+ table#options {
62
+ float: right;
63
+ }
64
+ table#options td {
65
+ vertical-align: top;
66
+ padding-left: 10px;
67
+ }
68
+
69
+ #about p {
70
+ margin: 0 6px 6px 0;
71
+ }
72
+
73
+ li {
74
+ line-height: 150%;
75
+ }
76
+
77
+
78
+ #testresults {
79
+ display: none;
80
+ font-family: monaco, "lucida console", "courier new", monospace;
81
+ }
82
+
83
+ .CodeMirror {
84
+ border: 1px solid #ccc;
85
+ margin-bottom: 6px;
86
+ background: white;
87
+ }
88
+ .CodeMirror-scroll {
89
+ min-height: 400px;
90
+ max-height: 100%;
91
+ height: auto;
92
+ overflow-y: hidden;
93
+ overflow-x: auto;
94
+ width: 100%
95
+ }
96
+ </style>
97
+ <script src="jquery/jquery.js"></script>
98
+ <script src="jquery/jquery.cookie.js"></script>
99
+
100
+
101
+ <script src="beautify.js"></script>
102
+ <script src="beautify-css.js"></script>
103
+ <script src="beautify-html.js"></script>
104
+ <script src="tests/sanitytest.js"></script>
105
+ <script src="tests/beautify-tests.js"></script>
106
+ <script src="unpackers/javascriptobfuscator_unpacker.js"></script>
107
+ <script src="unpackers/urlencode_unpacker.js"></script>
108
+ <script src="unpackers/p_a_c_k_e_r_unpacker.js"></script>
109
+ <script src="unpackers/myobfuscate_unpacker.js"></script>
110
+
111
+ <script>
112
+
113
+ var the = {
114
+ use_codemirror: ( ! window.location.href.match(/without-codemirror/)),
115
+ beautify_in_progress: false,
116
+ editor: null // codemirror editor
117
+ };
118
+
119
+ function run_tests() {
120
+ var st = new SanityTest();
121
+ run_beautifier_tests(st);
122
+ JavascriptObfuscator.run_tests(st);
123
+ P_A_C_K_E_R.run_tests(st);
124
+ Urlencoded.run_tests(st);
125
+ MyObfuscate.run_tests(st);
126
+ // $('#testresults').html(results.replace(/r/g, '').replace(/\n/g, '<br>'));
127
+ var results = st.results_raw().replace(/ /g, '&nbsp;').replace(/\r/g, '·').replace(/\n/g, '<br>');
128
+ $('#testresults').html(results).show();
129
+ }
130
+
131
+
132
+ function any(a, b) {
133
+ return a || b;
134
+ }
135
+
136
+ function read_settings_from_cookie() {
137
+ $('#tabsize').val(any($.cookie('tabsize'), '4'));
138
+ $('#brace-style').val(any($.cookie('brace-style'), 'collapse'));
139
+ $('#detect-packers').attr('checked', $.cookie('detect-packers') !== 'off');
140
+ $('#preserve-newlines').attr('checked', $.cookie('preserve-newlines') !== 'off');
141
+ $('#keep-array-indentation').attr('checked', $.cookie('keep-array-indentation') === 'on');
142
+ $('#indent-scripts').val(any($.cookie('indent-scripts'), 'normal'));
143
+ $('#space-before-conditional').attr('checked', $.cookie('space-before-conditional') !== 'off');
144
+ }
145
+
146
+ function store_settings_to_cookie() {
147
+ var opts = { expires: 360 };
148
+ $.cookie('tabsize', $('#tabsize').val(), opts);
149
+ $.cookie('brace-style', $('#brace-style').val(), opts);
150
+ $.cookie('detect-packers', $('#detect-packers').attr('checked') ? 'on' : 'off', opts);
151
+ $.cookie('preserve-newlines', $('#preserve-newlines').attr('checked') ? 'on' : 'off', opts);
152
+ $.cookie('keep-array-indentation', $('#keep-array-indentation').attr('checked') ? 'on' : 'off', opts);
153
+ $.cookie('space-before-conditional', $('#space-before-conditional').attr('checked') ? 'on' : 'off', opts);
154
+ $.cookie('indent-scripts', $('#indent-scripts').val(), opts);
155
+ }
156
+
157
+ function unpacker_filter(source) {
158
+ var trailing_comments = '';
159
+ var comment = '';
160
+ var found = false;
161
+
162
+ do {
163
+ found = false;
164
+ if (/^\s*\/\*/.test(source)) {
165
+ found = true;
166
+ comment = source.substr(0, source.indexOf('*/') + 2);
167
+ source = source.substr(comment.length).replace(/^\s+/, '');
168
+ trailing_comments += comment + "\n";
169
+ } else if (/^\s*\/\//.test(source)) {
170
+ found = true;
171
+ comment = source.match(/^\s*\/\/.*/)[0];
172
+ source = source.substr(comment.length).replace(/^\s+/, '');
173
+ trailing_comments += comment + "\n";
174
+ }
175
+ } while (found);
176
+
177
+ if (P_A_C_K_E_R.detect(source)) {
178
+ // P.A.C.K.E.R unpacking may fail, even though it is detected
179
+ var unpacked = P_A_C_K_E_R.unpack(source);
180
+ if (unpacked != source) {
181
+ source = unpacker_filter(unpacked);
182
+ }
183
+ }
184
+ if (Urlencoded.detect(source)) {
185
+ source = unpacker_filter(Urlencoded.unpack(source))
186
+ }
187
+ if (JavascriptObfuscator.detect(source)) {
188
+ source = unpacker_filter(JavascriptObfuscator.unpack(source))
189
+ }
190
+ if (MyObfuscate.detect(source)) {
191
+ source = unpacker_filter(MyObfuscate.unpack(source))
192
+ }
193
+
194
+ return trailing_comments + source;
195
+ }
196
+
197
+
198
+ function beautify() {
199
+ if (the.beautify_in_progress) return;
200
+
201
+ store_settings_to_cookie();
202
+
203
+ the.beautify_in_progress = true;
204
+
205
+ var source;
206
+ if (the.editor) {
207
+ source = the.editor.getValue();
208
+ } else {
209
+ source = $('#source').val();
210
+ }
211
+ var indent_size = $('#tabsize').val();
212
+ var indent_char = indent_size == 1 ? '\t' : ' ';
213
+ var preserve_newlines = $('#preserve-newlines').attr('checked');
214
+ var keep_array_indentation = $('#keep-array-indentation').attr('checked');
215
+ var indent_scripts = $('#indent-scripts').val();
216
+ var brace_style = $('#brace-style').val();
217
+ var space_before_conditional = $('#space-before-conditional').attr('checked');
218
+
219
+
220
+ var opts = {
221
+ indent_size: indent_size,
222
+ indent_char: indent_char,
223
+ preserve_newlines:preserve_newlines,
224
+ brace_style: brace_style,
225
+ keep_array_indentation:keep_array_indentation,
226
+ space_after_anon_function:true,
227
+ space_before_conditional: space_before_conditional,
228
+ indent_scripts:indent_scripts};
229
+
230
+ var output;
231
+ if (looks_like_html(source)) {
232
+ output = style_html(source, opts);
233
+ } else {
234
+ if ($('#detect-packers').attr('checked')) {
235
+ source = unpacker_filter(source);
236
+ }
237
+ output = js_beautify(source, opts);
238
+ }
239
+ if (the.editor) {
240
+ the.editor.setValue(output);
241
+ } else {
242
+ $('#source').val(output);
243
+ }
244
+
245
+ the.beautify_in_progress = false;
246
+ }
247
+
248
+ function looks_like_html(source)
249
+ {
250
+ // <foo> - looks like html
251
+ // <!--\nalert('foo!');\n--> - doesn't look like html
252
+
253
+ var trimmed = source.replace(/^[ \t\n\r]+/, '');
254
+ var comment_mark = '<' + '!-' + '-';
255
+ return (trimmed && (trimmed.substring(0, 1) === '<' && trimmed.substring(0, 4) !== comment_mark));
256
+ }
257
+
258
+ $(function() {
259
+
260
+ read_settings_from_cookie();
261
+
262
+ var default_text = "// This is just a sample script. Paste your real code (javascript or HTML) here.\n\nif ('this_is'==/an_example/){of_beautifer();}else{var a=b?(c%d):e[f];}";
263
+
264
+ if (the.use_codemirror) {
265
+ the.editor = CodeMirror.fromTextArea($('#source').get(0))
266
+ the.editor.setValue(default_text);
267
+ $('.CodeMirror').click(function () {
268
+ if (the.editor.getValue() == default_text) {
269
+ the.editor.setValue('');
270
+ }
271
+ });
272
+ } else {
273
+ $('#source').val(default_text).bind('click focus', function () {
274
+ if ($(this).val() == default_text) {
275
+ $(this).val('');
276
+ }
277
+ }).bind('blur', function () {
278
+ if ( ! $(this).val()) {
279
+ $(this).val(default_text);
280
+ }
281
+ });
282
+ }
283
+
284
+
285
+ $(window).bind('keydown', function (e) {
286
+ if (e.ctrlKey && e.keyCode == 13) {
287
+ beautify();
288
+ }
289
+ })
290
+ $('#submit').click(beautify);
291
+ $('select').change(beautify);
292
+
293
+
294
+ });
295
+ </script>
296
+ </head>
297
+ <body>
298
+
299
+ <table id="options">
300
+ <tr>
301
+ <td>
302
+ <select name="tabsize" id="tabsize">
303
+ <option value="1">indent with a tab character</option>
304
+ <option value="2">indent with 2 spaces</option>
305
+ <option value="3">indent with 3 spaces</option>
306
+ <option value="4">indent with 4 spaces</option>
307
+ <option value="8">indent with 8 spaces</option>
308
+ </select><br>
309
+
310
+ <select id="brace-style">
311
+ <option value="collapse">Braces with control statement</option>
312
+ <option value="expand">Braces on own line</option>
313
+ <option value="end-expand">End braces on own line</option>
314
+ <!-- option value="expand-strict">Braces always on own line (not recommended)</option -->
315
+ </select>
316
+
317
+ <p style="margin:6px 0 0 0">HTML &lt;style&gt;, &lt;script&gt; formatting:</p><select id="indent-scripts">
318
+ <option value="keep">Keep indent level of the tag</option>
319
+ <option value="normal">Add one indent level</option>
320
+ <option value="separate">Separate indentation</option>
321
+ </select>
322
+
323
+ </td><td>
324
+
325
+ <input class="checkbox" type="checkbox" id="preserve-newlines"><label for="preserve-newlines"> Preserve empty lines?</label><br>
326
+ <input class="checkbox" type="checkbox" id="detect-packers"><label for="detect-packers"> Detect packers and obfuscators?</label><br>
327
+ <input class="checkbox" type="checkbox" id="keep-array-indentation"><label for="keep-array-indentation"> Keep array indentation?</label><br>
328
+ <input class="checkbox" type="checkbox" id="space-before-conditional"><label for="space-before-conditional"> Space before conditional: "if(x)" / "if (x)"
329
+ <br><a style="margin-left: 25px" href="?without-codemirror">Turn off bells and whistles?</a>
330
+
331
+
332
+ </td></tr>
333
+ </table>
334
+
335
+ <div id="about">
336
+ <p><strong>Beautify, unpack or deobfuscate JavaScript and HTML, make JSON/JSONP readable, etc.</strong>.</p>
337
+ <p>All of the source code is completely free and open, available on the <a href="https://github.com/einars/js-beautify">github</a> under MIT licence, <br>and we have a command-line version and a python library as well.
338
+ </div>
339
+
340
+
341
+ <button id="submit"><strong>Beautify JavaScript or HTML</strong> <em>(ctrl-enter)</em></button>
342
+ <textarea id="source" rows="30" cols="160"></textarea>
343
+
344
+ <div class="blurb">
345
+ <div style="float:right; width: 210px;">
346
+ <a style="display:block; float: left; padding-top: 3px" href="http://flattr.com/thing/94550/jsbeautifier-org" target="_blank"><img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr" /></a>
347
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
348
+ <input type="hidden" name="cmd" value="_s-xclick">
349
+ <input type="hidden" name="hosted_button_id" value="TL28UJK2ARCUJ">
350
+ <input style="border:0" type="image" src="http://spicausis.lv/misc/paypal-donate.gif" name="submit" alt="PayPal - The safer, easier way to pay online!">
351
+ <img alt="" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
352
+ </form>
353
+ </div>
354
+
355
+ <p>Browser extensions and other uses:</p>
356
+ <ul id="uses">
357
+
358
+ <li>A <a href="javascript:(function(){s=document.getElementsByTagName('SCRIPT');tx='';sr=[];for(i=0;i<s.length;i++){with(s.item(i)){t=text;if(t){tx+=t;}else{sr.push(src)};}};with(window.open()){document.write('<textarea id=&quot;t&quot;>'+(sr.join(&quot;\n&quot;))+&quot;\n\n-----\n\n&quot;+tx+'</textarea><script src=&quot;http://jsbeautifier.org/beautify.js&quot;></script><script>with(document.getElementById(&quot;t&quot;)){value=js_beautify(value);with(style){width=&quot;99%&quot;;height=&quot;99%&quot;;borderStyle=&quot;none&quot;;}};</script>');document.close();}})();"><strong>bookmarklet</strong></a> (drag it to your bookmarks) by Ichiro Hiroshi to see all scripts used on the page,</li>
359
+
360
+ <li style="margin-top: 8px"><strong>Chrome</strong>: <a href="https://github.com/rixth/jsbeautify-for-chrome">jsbeautify-for-chrome</a> by Tom Rix,</li>
361
+ <li><strong>Chrome</strong>: <a href="https://chrome.google.com/webstore/detail/piekbefgpgdecckjcpffhnacjflfoddg">Pretty Beautiful JavaScript</a> by Will McSweeney,</li>
362
+ <li style="margin-top: 8px"><strong>Firefox</strong>: <a href="https://addons.mozilla.org/en-US/firefox/addon/javascript-deminifier/">Javascript deminifier</a> by Ben Murphy,<br>to be used together with the firebug (<a href="https://github.com/benmmurphy/jsdeminifier_xpi/">github</a>),</li>
363
+ <li style="margin-top: 8px"><strong>Safari</strong>: <a href="http://spadin.github.com/js-beautify-safari-extension">Safari extension</a> by Sandro Padin,</li>
364
+ <li style="margin-top: 8px"><strong>Opera</strong>: <a href="https://addons.opera.com/addons/extensions/details/readable-javascript/">Readable JavaScript</a> (<a href="https://github.com/Dither/readable-javascript">github</a>) by Dither,</li>
365
+ <li><strong>Opera</strong>: <a href="https://addons.opera.com/addons/extensions/details/source/">Source</a> extension by Deathamns,</li>
366
+ <li style="margin-top: 12px"><a style="font-weight: bold" href="http://fiddler2.com/">Fiddler</a> proxy: <a href="http://fiddler2.com/Fiddler2/extensions.asp">JavaScript Formatter addon</a>,
367
+ <li><strong>gEdit</strong> <a href="https://github.com/nagaozen/gedit-tunnings/">tips by Fabio Nagao</a>,</li>
368
+ <li><strong>Akelpad</strong> <a href="http://akelpad.sourceforge.net/forum/viewtopic.php?p=11246#11246">extension</a> by Infocatcher,</li>
369
+ <li>Beautifier in <a style="font-weight: bold" href="http://sethmason.com/2011/04/28/jsbeautify-in-emacs.html">Emacs</a> write-up by Seth Mason,</li>
370
+ <li><a style="font-weight:bold" href="http://c9.io">Cloud9</a>, a lovely IDE running in a browser, working in the node/cloud, uses jsbeautifier (<a href="https://github.com/ajaxorg/cloud9">github</a>),</li>
371
+ <li><a style="font-weight:bold" href="http://www.symetronapps.com/pages/apps/shrinker.html">Shrinker</a>, a non-free JavaScript packer for Mac. I&nbsp;haven't used it, so I&nbsp;have no idea if it's any good,</li>
372
+ <li><a style="font-weight:bold" href="http://www.restconsole.com/">REST Console</a>, a request debugging tool for Chrome, beautifies JSON responses (<a href="https://github.com/codeinchaos/rest-console">github</a>),</li>
373
+ <li><a style="font-weight:bold" href="http://mitmproxy.org/">mitmproxy</a>, a nifty SSL-capable HTTP proxy, provides pretty javascript responses (<a href="https://github.com/cortesi/mitmproxy">github</a>).</li>
374
+ <li><a style="font-weight:bold" href="http://www.wakanda.org/">wakanda</a>, a neat IDE for web and mobile applications has a <a href="http://forum.wakanda.org/showthread.php?1483-3-new-extensions-JSLint-Beautifier-and-Snippet">Beautifier extension</a> (<a href="https://github.com/Wakanda/wakanda-extensions/tree/master/Beautifier">github</a>).</li>
375
+ <li><a style="font-weight:bold" href="https://github.com/michalliu/sourcebeautify.vim">sourcebeautify.vim</a>, a nice vim plugin by michalliu (needs a supported js runtime),</li>
376
+ <li><a style="font-weight:bold" href="http://portswigger.net/burp/">Burp Suite</a> now has a <a href="http://code.google.com/p/burp-suite-beautifier-extension/">beautfier extension</a>, thanks to Soroush Dalili,</li>
377
+ <li><a style="font-weight:bold" href="http://plugins.netbeans.org/plugin/43263/jsbeautify">Netbeans jsbeautify</a> plugin by Drew Hamlett (<a href="https://github.com/drewhjava/netbeans-jsbeautify">github</a>).</li>
378
+ <li class="writeme">Doing anything interesting? Write me to einar@jsbeautifier.org and I'll include your link.</li>
379
+ </ul>
380
+
381
+ <p class="me-me-me">Written by Einar Lielmanis, <a href="mailto:einar@jsbeautifier.org">einar@jsbeautifier.org</a>, Python version flourished by <a href="http://github.com/satufk">Stefano Sanfilippo</a>. We use the wonderful <a href="http://codemirror.net">CodeMirror</a> syntax highlighting editor, written by Marijn Haverbeke.</p>
382
+ <p class="contributors">Made with a great help of <a href="http://jason.diamond.name/weblog/">Jason&nbsp;Diamond</a>, Patrick&nbsp;Hof, Nochum&nbsp;Sossonko, Andreas&nbsp;Schneider, Dave&nbsp;Vasilevsky, <a href="http://my.opera.com/Vital/blog/">Vital&nbsp;Batmanov,</a> Ron&nbsp;Baldwin, Gabriel&nbsp;Harrison, <a href="http://shullian.com">Chris&nbsp;J.&nbsp;Shull</a>, <a href="http://mathiasbynens.be/">Mathias Bynens</a> and others.
383
+ </p>
384
+
385
+ <p style="text-align:right">
386
+ <a href="#" style="color: #ccc; border-bottom: 1px dashed #ccc; text-decoration: none;" onclick="run_tests(); return false;">Run the tests</a>
387
+ </p>
388
+
389
+ </div>
390
+ <div id="testresults"></div>
391
+ <script>
392
+ var _gaq = [['_setAccount', 'UA-7409939-1'], ['_trackPageview']];
393
+ (function(d, t) {
394
+ var g = d.createElement(t),
395
+ s = d.getElementsByTagName(t)[0];
396
+ g.src = '//www.google-analytics.com/ga.js';
397
+ s.parentNode.insertBefore(g, s);
398
+ }(document, 'script'));
399
+ </script>
400
+ </body>
401
+ </html>
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Cookie plugin
3
+ *
4
+ * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
5
+ * Dual licensed under the MIT and GPL licenses:
6
+ * http://www.opensource.org/licenses/mit-license.php
7
+ * http://www.gnu.org/licenses/gpl.html
8
+ *
9
+ */
10
+
11
+ /**
12
+ * Create a cookie with the given name and value and other optional parameters.
13
+ *
14
+ * @example $.cookie('the_cookie', 'the_value');
15
+ * @desc Set the value of a cookie.
16
+ * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
17
+ * @desc Create a cookie with all available options.
18
+ * @example $.cookie('the_cookie', 'the_value');
19
+ * @desc Create a session cookie.
20
+ * @example $.cookie('the_cookie', null);
21
+ * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
22
+ * used when the cookie was set.
23
+ *
24
+ * @param String name The name of the cookie.
25
+ * @param String value The value of the cookie.
26
+ * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
27
+ * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
28
+ * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
29
+ * If set to null or omitted, the cookie will be a session cookie and will not be retained
30
+ * when the the browser exits.
31
+ * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
32
+ * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
33
+ * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
34
+ * require a secure protocol (like HTTPS).
35
+ * @type undefined
36
+ *
37
+ * @name $.cookie
38
+ * @cat Plugins/Cookie
39
+ * @author Klaus Hartl/klaus.hartl@stilbuero.de
40
+ */
41
+
42
+ /**
43
+ * Get the value of a cookie with the given name.
44
+ *
45
+ * @example $.cookie('the_cookie');
46
+ * @desc Get the value of a cookie.
47
+ *
48
+ * @param String name The name of the cookie.
49
+ * @return The value of the cookie.
50
+ * @type String
51
+ *
52
+ * @name $.cookie
53
+ * @cat Plugins/Cookie
54
+ * @author Klaus Hartl/klaus.hartl@stilbuero.de
55
+ */
56
+ jQuery.cookie = function(name, value, options) {
57
+ if (typeof value != 'undefined') { // name and value given, set cookie
58
+ options = options || {};
59
+ if (value === null) {
60
+ value = '';
61
+ options.expires = -1;
62
+ }
63
+ var expires = '';
64
+ if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
65
+ var date;
66
+ if (typeof options.expires == 'number') {
67
+ date = new Date();
68
+ date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
69
+ } else {
70
+ date = options.expires;
71
+ }
72
+ expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
73
+ }
74
+ // CAUTION: Needed to parenthesize options.path and options.domain
75
+ // in the following expressions, otherwise they evaluate to undefined
76
+ // in the packed version for some reason...
77
+ var path = options.path ? '; path=' + (options.path) : '';
78
+ var domain = options.domain ? '; domain=' + (options.domain) : '';
79
+ var secure = options.secure ? '; secure' : '';
80
+ document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
81
+ } else { // only name given, get cookie
82
+ var cookieValue = null;
83
+ if (document.cookie && document.cookie != '') {
84
+ var cookies = document.cookie.split(';');
85
+ for (var i = 0; i < cookies.length; i++) {
86
+ var cookie = jQuery.trim(cookies[i]);
87
+ // Does this cookie string begin with the name we want?
88
+ if (cookie.substring(0, name.length + 1) == (name + '=')) {
89
+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
90
+ break;
91
+ }
92
+ }
93
+ }
94
+ return cookieValue;
95
+ }
96
+ };