123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563 |
- <html>
- <!--
- The MIT License (MIT)
- Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors.
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation files
- (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge,
- publish, distribute, sublicense, and/or sell copies of the Software,
- and to permit persons to whom the Software is furnished to do so,
- subject to the following conditions:
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- -->
- <head>
- <!-- if you feel an urge to move this to bootstrap or something, you're most welcome -->
- <meta charset="utf-8">
- <title>Online JavaScript beautifier</title>
- <link rel="icon" href="web/favicon.png" type="image/png">
- <link rel="stylesheet" href="web/third-party/codemirror/lib/codemirror.css">
- <script src="web/third-party/codemirror/lib/codemirror.js"></script>
- <script src="web/third-party/codemirror/mode/javascript/javascript.js"></script>
- <style>
- body {
- background: #eee;
- color: #333;
- }
- img {
- border: 0;
- }
- a.self {
- font-weight: bold;
- text-decoration: none;
- color: #444;
- border-bottom: 1px solid #aaa
- }
- p, select, label, .blurb, a.turn-off-codemirror {
- font:13px/1.231 arial, sans-serif;
- *font-size:small;
- }
- a.turn-off-codemirror {
- margin-left: 25px;
- }
- button.submit {
- width: 100%;
- padding: 10px 0;
- cursor: pointer;
- margin: 0;
- }
- button.submit em {
- font-size: 11px;
- font-style: normal;
- color: #999;
- }
- label {
- cursor: pointer;
- }
- select {
- width: 220px;
- }
- table#options {
- float: right;
- }
- table#options td {
- vertical-align: top;
- padding-left: 10px;
- }
- .col-6 {
- width: 50%;
- float: left;
- }
- #about {
- float: left;
- }
- #about p {
- margin: 0 6px 6px 0;
- }
- .uses li {
- padding-top: 3px;
- line-height: 150%;
- }
- .uses li.sep {
- margin-top: 8px;
- }
- #testresults {
- display: none;
- font-family: monaco, "lucida console", "courier new", monospace;
- }
- .CodeMirror {
- border: 1px solid #ccc;
- height: 450px;
- font-size: 90%;
- margin-bottom: 6px;
- background: white;
- }
- p {
- margin-left: 40px;
- margin-right: 40px;
- }
- a {
- white-space: nowrap;
- color: #36d;
- }
- .contributor-sep {
- clear: left;
- border-top: 1px solid #ccc;
- padding-top: 8px;
- }
- h2 {
- margin-top: 32px;
- margin-left: 40px;
- margin-bottom: 0;
- font-size: 20px;
- font-weight: normal;
- }
- </style>
- <script src="web/third-party/jquery/jquery.js"></script>
- <script src="web/third-party/jquery/jquery.cookie.js"></script>
- <script src="js/lib/beautify.js"></script>
- <script src="js/lib/beautify-css.js"></script>
- <script src="js/lib/beautify-html.js"></script>
- <script src="js/test/sanitytest.js"></script>
- <script src="js/test/generated/beautify-javascript-tests.js"></script>
- <script src="js/test/generated/beautify-css-tests.js"></script>
- <script src="js/test/generated/beautify-html-tests.js"></script>
- <script src="js/lib/unpackers/javascriptobfuscator_unpacker.js"></script>
- <script src="js/lib/unpackers/urlencode_unpacker.js"></script>
- <script src="js/lib/unpackers/p_a_c_k_e_r_unpacker.js"></script>
- <script src="js/lib/unpackers/myobfuscate_unpacker.js"></script>
- <script>
- var the = {
- use_codemirror: (!window.location.href.match(/without-codemirror/)),
- beautify_in_progress: false,
- editor: null // codemirror editor
- };
- function run_tests() {
- var st = new SanityTest();
- run_javascript_tests(st, Urlencoded, js_beautify, html_beautify, css_beautify);
- run_css_tests(st, Urlencoded, js_beautify, html_beautify, css_beautify);
- run_html_tests(st, Urlencoded, js_beautify, html_beautify, css_beautify);
- JavascriptObfuscator.run_tests(st);
- P_A_C_K_E_R.run_tests(st);
- Urlencoded.run_tests(st);
- MyObfuscate.run_tests(st);
- var results = st.results_raw()
- .replace(/&/g, '&')
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/ /g, ' ')
- .replace(/\r/g, '·')
- .replace(/\n/g, '<br>');
- $('#testresults').html(results).show();
- }
- function any(a, b) {
- return a || b;
- }
- function read_settings_from_cookie() {
- $('#tabsize').val(any($.cookie('tabsize'), '4'));
- $('#brace-style').val(any($.cookie('brace-style'), 'collapse'));
- $('#detect-packers').prop('checked', $.cookie('detect-packers') !== 'off');
- $('#max-preserve-newlines').val(any($.cookie('max-preserve-newlines'), '5'));
- $('#keep-array-indentation').prop('checked', $.cookie('keep-array-indentation') === 'on');
- $('#break-chained-methods').prop('checked', $.cookie('break-chained-methods') === 'on');
- $('#indent-scripts').val(any($.cookie('indent-scripts'), 'normal'));
- $('#space-before-conditional').prop('checked', $.cookie('space-before-conditional') !== 'off');
- $('#wrap-line-length').val(any($.cookie('wrap-line-length'), '0'));
- $('#unescape-strings').prop('checked', $.cookie('unescape-strings') === 'on');
- $('#jslint-happy').prop('checked', $.cookie('jslint-happy') === 'on');
- $('#end-with-newline').prop('checked', $.cookie('end-with-newline') === 'on');
- $('#indent-inner-html').prop('checked', $.cookie('indent-inner-html') === 'on');
- $('#comma-first').prop('checked', $.cookie('comma-first') === 'on');
- $('#e4x').prop('checked', $.cookie('e4x') === 'on');
- }
- function store_settings_to_cookie() {
- var opts = {
- expires: 360
- };
- $.cookie('tabsize', $('#tabsize').val(), opts);
- $.cookie('brace-style', $('#brace-style').val(), opts);
- $.cookie('detect-packers', $('#detect-packers').prop('checked') ? 'on' : 'off', opts);
- $.cookie('max-preserve-newlines', $('#max-preserve-newlines').val(), opts);
- $.cookie('keep-array-indentation', $('#keep-array-indentation').prop('checked') ? 'on' : 'off', opts);
- $.cookie('break-chained-methods', $('#break-chained-methods').prop('checked') ? 'on' : 'off', opts);
- $.cookie('space-before-conditional', $('#space-before-conditional').prop('checked') ? 'on' : 'off',
- opts);
- $.cookie('unescape-strings', $('#unescape-strings').prop('checked') ? 'on' : 'off', opts);
- $.cookie('jslint-happy', $('#jslint-happy').prop('checked') ? 'on' : 'off', opts);
- $.cookie('end-with-newline', $('#end-with-newline').prop('checked') ? 'on' : 'off', opts);
- $.cookie('wrap-line-length', $('#wrap-line-length').val(), opts);
- $.cookie('indent-scripts', $('#indent-scripts').val(), opts);
- $.cookie('indent-inner-html', $('#indent-inner-html').prop('checked') ? 'on' : 'off', opts);
- $.cookie('comma-first', $('#comma-first').prop('checked') ? 'on' : 'off', opts);
- $.cookie('e4x', $('#e4x').prop('checked') ? 'on' : 'off', opts);
- }
- function unpacker_filter(source) {
- var trailing_comments = '',
- comment = '',
- unpacked = '',
- found = false;
- // cut trailing comments
- do {
- found = false;
- if (/^\s*\/\*/.test(source)) {
- found = true;
- comment = source.substr(0, source.indexOf('*/') + 2);
- source = source.substr(comment.length).replace(/^\s+/, '');
- trailing_comments += comment + "\n";
- } else if (/^\s*\/\//.test(source)) {
- found = true;
- comment = source.match(/^\s*\/\/.*/)[0];
- source = source.substr(comment.length).replace(/^\s+/, '');
- trailing_comments += comment + "\n";
- }
- } while (found);
- var unpackers = [P_A_C_K_E_R, Urlencoded, JavascriptObfuscator/*, MyObfuscate*/];
- for (var i = 0; i < unpackers.length; i++) {
- if (unpackers[i].detect(source)) {
- unpacked = unpackers[i].unpack(source);
- if (unpacked != source) {
- source = unpacker_filter(unpacked);
- }
- }
- }
- return trailing_comments + source;
- }
- function beautify() {
- if (the.beautify_in_progress) return;
- store_settings_to_cookie();
- the.beautify_in_progress = true;
- var source = the.editor ? the.editor.getValue() : $('#source').val(),
- output,
- opts = {};
- opts.indent_size = $('#tabsize').val();
- opts.indent_char = opts.indent_size == 1 ? '\t' : ' ';
- opts.max_preserve_newlines = $('#max-preserve-newlines').val();
- opts.preserve_newlines = opts.max_preserve_newlines !== "-1";
- opts.keep_array_indentation = $('#keep-array-indentation').prop('checked');
- opts.break_chained_methods = $('#break-chained-methods').prop('checked');
- opts.indent_scripts = $('#indent-scripts').val();
- opts.brace_style = $('#brace-style').val() + ($('#brace-preserve-inline').prop('checked') ? ",preserve-inline" : "");
- opts.space_before_conditional = $('#space-before-conditional').prop('checked');
- opts.unescape_strings = $('#unescape-strings').prop('checked');
- opts.jslint_happy = $('#jslint-happy').prop('checked');
- opts.end_with_newline = $('#end-with-newline').prop('checked');
- opts.wrap_line_length = $('#wrap-line-length').val();
- opts.indent_inner_html = $('#indent-inner-html').prop('checked');
- opts.comma_first = $('#comma-first').prop('checked');
- opts.e4x = $('#e4x').prop('checked');
- if (looks_like_html(source)) {
- output = html_beautify(source, opts);
- } else {
- if ($('#detect-packers').prop('checked')) {
- source = unpacker_filter(source);
- }
- output = js_beautify(source, opts);
- }
- if (the.editor) {
- the.editor.setValue(output);
- } else {
- $('#source').val(output);
- }
- the.beautify_in_progress = false;
- }
- function looks_like_html(source) {
- // <foo> - looks like html
- var trimmed = source.replace(/^[ \t\n\r]+/, '');
- return trimmed && (trimmed.substring(0, 1) === '<');
- }
- </script>
- </head>
- <body>
- <div id="about">
- <p>
- <a class="self" href="./">Beautify, unpack or deobfuscate JavaScript and HTML, make JSON/JSONP readable, etc.</a>
- </p>
- <p>
- All of the source code is completely free and open, available on <a href="https://github.com/beautify-web/js-beautify">GitHub</a> under MIT licence,
- <br>and we have a command-line version, python library and a <a href="https://npmjs.org/package/js-beautify">node package</a> as well.
- </p>
- </div>
- <table id="options">
- <tr>
- <td>
- <select name="tabsize" id="tabsize">
- <option value="1">Indent with a tab character</option>
- <option value="2">Indent with 2 spaces</option>
- <option value="3">Indent with 3 spaces</option>
- <option value="4">Indent with 4 spaces</option>
- <option value="8">Indent with 8 spaces</option>
- </select>
- <br>
- <select name="max-preserve-newlines" id="max-preserve-newlines">
- <option value="-1">Remove all extra newlines</option>
- <option value="1">Allow 1 newline between tokens</option>
- <option value="2">Allow 2 newlines between tokens</option>
- <option value="5">Allow 5 newlines between tokens</option>
- <option value="10">Allow 10 newlines between tokens</option>
- <option value="0">Allow unlimited newlines between tokens</option>
- </select>
- <br>
- <select name="wrap-line-length" id="wrap-line-length">
- <option value="0">Do not wrap lines</option>
- <option value="40">Wrap lines near 40 characters</option>
- <option value="70">Wrap lines near 70 characters</option>
- <option value="80">Wrap lines near 80 characters</option>
- <option value="110">Wrap lines near 110 characters</option>
- <option value="120">Wrap lines near 120 characters</option>
- <option value="160">Wrap lines near 160 characters</option>
- </select>
- <br>
- <select id="brace-style">
- <option value="collapse">Braces with control statement</option>
- <option value="expand">Braces on own line</option>
- <option value="end-expand">End braces on own line</option>
- <option value="none">Attempt to keep braces where they are</option>
- </select>
- <p style="margin:6px 0 0 0">HTML <style>, <script> formatting:</p>
- <select id="indent-scripts">
- <option value="keep">Keep indent level of the tag</option>
- <option value="normal">Add one indent level</option>
- <option value="separate">Separate indentation</option>
- </select>
- </td>
- <td>
- <input class="checkbox" type="checkbox" id="end-with-newline">
- <label for="end-with-newline">End script and style with newline?</label>
- <br>
- <input class="checkbox" type="checkbox" id="e4x">
- <label for="e4x">Support e4x/jsx syntax</label>
- <br>
- <input class="checkbox" type="checkbox" id="comma-first">
- <label for="comma-first">Use comma-first list style?</label>
- <br>
- <input class="checkbox" type="checkbox" id="detect-packers">
- <label for="detect-packers">Detect packers and obfuscators?</label>
- <br>
- <input class="checkbox" type="checkbox" id="brace-preserve-inline">
- <label for="brace-preserve-inline">Preserve inline braces/code blocks?</label>
- <br>
- <input class="checkbox" type="checkbox" id="keep-array-indentation">
- <label for="keep-array-indentation">Keep array indentation?</label>
- <br>
- <input class="checkbox" type="checkbox" id="break-chained-methods">
- <label for="break-chained-methods">Break lines on chained methods?</label>
- <br>
- <input class="checkbox" type="checkbox" id="space-before-conditional">
- <label for="space-before-conditional">Space before conditional: "if(x)" / "if (x)"</label>
- <br>
- <input class="checkbox" type="checkbox" id="unescape-strings">
- <label for="unescape-strings">Unescape printable chars encoded as \xNN or \uNNNN?</label>
- <br>
- <input class="checkbox" type="checkbox" id="jslint-happy">
- <label for="jslint-happy">Use JSLint-happy formatting tweaks?</label>
- <br>
- <input class="checkbox" type="checkbox" id="indent-inner-html">
- <label for="indent-inner-html">Indent <head> and <body> sections?</label>
- <br><a href="?without-codemirror" class="turn-off-codemirror">Use a simple textarea for code input?</a>
- </td>
- </tr>
- </table>
- <div style="line-height: 0">
- <button class="submit"><strong>Beautify JavaScript or HTML</strong> <em>(ctrl-enter)</em>
- </button>
- <textarea id="source" rows="30" cols="160"></textarea>
- <button class="submit"><strong>Beautify JavaScript or HTML</strong> <em>(ctrl-enter)</em>
- </button>
- </div>
- <div class="blurb">
- <h2>Browser extensions and other uses</h2>
- <div class="col-6">
- <ul class="uses">
- <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="t">'+(sr.join("\n"))+"\n\n-----\n\n"+tx+'</textarea><script src="http://jsbeautifier.org/beautify.js"></script><script>with(document.getElementById("t")){value=js_beautify(value);with(style){width="99%";height="99%";borderStyle="none";}};</script>');document.close();}})();"><strong>bookmarklet</strong></a> (drag
- it to your bookmarks) by Ichiro Hiroshi to see all scripts used on the page,</li>
- <li><strong>Chrome</strong>, in case the built-in CSS and javascript formatting isn't enough for you:<br>
- — <a href="https://chrome.google.com/webstore/detail/cfmcghennfbpmhemnnfjhkdmnbidpanb">Quick source viewer</a> by Tomi Mickelsson (<a href="https://github.com/tomimick/chrome-ext-view-src">github</a>, <a href="http://tomicloud.com/2012/07/viewsrc-chrome-ext">blog</a>),<br>
- — <a href="https://chrome.google.com/webstore/detail/javascript-and-css-code-b/iiglodndmmefofehaibmaignglbpdald">Javascript and CSS Code beautifier</a> by c7sky,<br>
- — <a href="https://chrome.google.com/webstore/detail/jsbeautify-for-google-chr/kkioiolcacgoihiiekambdciinadbpfk">jsbeautify-for-chrome</a> by Tom Rix (<a href="https://github.com/rixth/jsbeautify-for-chrome">github</a>),<br>
- — <a href="https://chrome.google.com/webstore/detail/piekbefgpgdecckjcpffhnacjflfoddg">Pretty Beautiful JavaScript</a> by Will McSweeney<br>
- — <a href="https://chrome.google.com/webstore/detail/stackoverflow-code-beauti/pljeafjjkkbacckkollfejkciddacmeb">Stackoverflow Code Beautify</a> by Making Odd Edit Studios (<a href="https://github.com/MakingOddEdit/CodeBeautify">github</a>).
- </li>
- <li><strong>Firefox</strong>: <a href="https://addons.mozilla.org/en-US/firefox/addon/javascript-deminifier/">Javascript deminifier</a> by Ben Murphy, to be
- used together with the firebug (<a href="https://github.com/benmmurphy/jsdeminifier_xpi/">github</a>),</li>
- <li><strong>Safari</strong>: <a href="http://spadin.github.com/js-beautify-safari-extension">Safari extension</a> by Sandro Padin,</li>
- <li><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>
- <li><strong>Opera</strong>: <a href="https://addons.opera.com/addons/extensions/details/source/">Source</a> extension by Deathamns,</li>
- <li><strong>Sublime Text 2/3:</strong> <a href="https://github.com/akalongman/sublimetext-codeformatter">CodeFormatter</a>, a python plugin by Avtandil Kikabidze, supports HTML, CSS, JS and a bunch of other languages,</li>
- <li><strong>Sublime Text 2/3:</strong> <a href="https://github.com/victorporof/Sublime-HTMLPrettify">HTMLPrettify</a>, a javascript plugin by Victor Porof,</li>
- <li><strong>Sublime Text 2:</strong> <a href="https://github.com/jdc0589/JsFormat">JsFormat</a>, a javascript formatting plugin for this nice editor by Davis
- Clark,</li>
- <li><strong>vim:</strong> <a href="https://github.com/michalliu/sourcebeautify.vim">sourcebeautify.vim</a>, a plugin by michalliu (requires node.js, V8, SpiderMonkey
- or cscript js engine),</li>
- <li><strong>vim:</strong> <a href="https://github.com/maksimr/vim-jsbeautify">vim-jsbeautify</a>, a plugin by Maksim Ryzhikov (node.js or V8 required),</li>
- <li><strong>Emacs:</strong> <a href="https://github.com/yasuyk/web-beautify">Web-beautify</a> formatting package by Yasuyuki Oka,</li>
- <li><strong>Komodo IDE:</strong> <a href="http://komodoide.com/packages/addons/beautify-js/">Beautify-js</a> addon by Bob de Haas (<a href="https://github.com/babobski/Beautify-js">github</a>),</li>
- <li><strong>C#:</strong> ghost6991 <a href="https://github.com/ghost6991/Jsbeautifier">ported the javascript formatter to C#</a>,
- <li><strong>Go:</strong> ditashi has <a href="https://github.com/ditashi/jsbeautifier-go">ported the javascript formatter to golang</a>,
- </ul>
- </div>
- <div class="col-6">
- <ul class="uses">
- <li><a href="https://marketplace.visualstudio.com/items/HookyQR.beautify">Beautify plugin</a> (<a href="https://github.com/HookyQR/VSCodeBeautify">github</a>) by HookyQR for the <a href="https://code.visualstudio.com/">Visual Studio Code</a> IDE</a>,
- <li><a href="http://fiddler2.com/">Fiddler</a> proxy: <a href="http://fiddler2.com/Fiddler2/extensions.asp">JavaScript Formatter addon</a>,
- <li><a href="https://github.com/nagaozen/gedit-tunnings/">gEdit tips</a> by Fabio Nagao,</li>
- <li><a href="http://akelpad.sourceforge.net/forum/viewtopic.php?p=11246#11246">Akelpad extension</a> by Infocatcher,</li>
- <li>Beautifier in <a href="http://sethmason.com/2011/04/28/jsbeautify-in-emacs.html">Emacs</a> write-up by Seth Mason,</li>
- <li><a 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>
- <li><a href="https://www.comment-devenir-un-hacker.com/app.html">Devenir Hacker App</a>, a non-free JavaScript packer for Mac,</li>
- <li><a 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>
- <li><a 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>
- <li><a 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>
- <li><a href="http://portswigger.net/burp/">Burp Suite</a> now has a <a href="https://github.com/irsdl/BurpSuiteJSBeautifier/">beautfier extension</a>,
- thanks to Soroush Dalili,</li>
- <li><a 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>
- <li><a href="https://github.com/drewhjava/brackets-beautify">brackets-beautify-extension</a> for <a href="http://brackets.io">Adobe Brackets</a> by Drew
- Hamlett (<a href="https://github.com/drewhjava/brackets-beautify">github</a>),</li>
- <li><a href="http://codecaddy.net/">codecaddy.net</a>, a collection of webdev-related tools, assembled by Darik Hall,
- <li><a href="http://www.editey.com/">editey.com</a>, an interesting and free Google-Drive oriented editor uses this beautifier,
- <li><a href="https://github.com/vkadam/grunt-jsbeautifier">a beautifier plugin for Grunt</a> by Vishal Kadam,
- <li><a href="http://www.uvviewsoft.com/synwrite/">SynWrite</a> editor has a JsFormat plugin (<a href="https://sourceforge.net/projects/synwrite-addons/files/PyPlugins/Alexey.JsFormat/">rar</a>, <a href="http://synwrite.sourceforge.net/forums/viewtopic.php?f=19&t=865">readme</a>),
- <li><a href="http://liveditor.com/">LIVEditor</a>, a live-editing HTML/CSS/JS IDE (commercial, Windows-only) uses the library,
- </ul>
- </div>
- <p>Doing anything interesting? Write us to <b>team@jsbeautifier.org</b> so we can add your project to the list.</p>
- <p class="contributor-sep">Written by <a href="https://github.com/einars">Einar Lielmanis</a>, maintained and evolved by <a href="https://github.com/bitwiseman/">Liam Newman</a>.</p>
- <p>We use the wonderful <a href="http://codemirror.net">CodeMirror</a> syntax highlighting editor, written by Marijn Haverbeke.
- </p>
- <p class="contributors">Made with a great help of Jason Diamond, Patrick Hof, Nochum Sossonko, Andreas Schneider,
- <br>Dave Vasilevsky,
- <a href="https://moikrug.ru/vital">Vital Batmanov</a>, Ron Baldwin, Gabriel Harrison,
- <a href="http://shullian.com">Chris J. Shull</a>,
- <a href="http://mathiasbynens.be/">Mathias Bynens</a>,
- <br>
- <a href="https://www.vittgam.net/">Vittorio Gambaletta</a>,
- <a href="https://github.com/esseks">Stefano Sanfilippo</a> and
- <a href="https://github.com/evocateur">Daniel Stockman</a>.
- </p>
- <p style="text-align:right">
- <a href="#" style="color: #ccc; border-bottom: 1px dashed #ccc; text-decoration: none;" onclick="run_tests(); return false;">Run the tests</a>
- </p>
- </div>
- <div id="testresults"></div>
- <script>
- $(function () {
- read_settings_from_cookie();
- var default_text =
- "// This is just a sample script. Paste your real code (javascript or HTML) here.\n\nif ('this_is'==/an_example/){of_beautifier();}else{var a=b?(c%d):e[f];}";
- var textArea = $('#source')[0];
- if (the.use_codemirror && typeof CodeMirror !== 'undefined') {
- the.editor = CodeMirror.fromTextArea(textArea, {
- theme: 'default',
- lineNumbers: true
- });
- the.editor.focus();
- the.editor.setValue(default_text);
- $('.CodeMirror').click(function () {
- if (the.editor.getValue() == default_text) {
- the.editor.setValue('');
- }
- });
- } else {
- $('#source').val(default_text).bind('click focus', function () {
- if ($(this).val() == default_text) {
- $(this).val('');
- }
- }).bind('blur', function () {
- if (!$(this).val()) {
- $(this).val(default_text);
- }
- });
- }
- $(window).bind('keydown', function (e) {
- if (e.ctrlKey && e.keyCode == 13) {
- beautify();
- }
- })
- $('.submit').click(beautify);
- $('select').change(beautify);
- });
- </script>
- <script>
- var _gaq = [
- ['_setAccount', 'UA-7409939-1'],
- ['_trackPageview']
- ];
- (function (d, t) {
- var g = d.createElement(t),
- s = d.getElementsByTagName(t)[0];
- g.src = '//www.google-analytics.com/ga.js';
- s.parentNode.insertBefore(g, s);
- }(document, 'script'));
- </script>
- </body>
- </html>
|