Javascript代码在线整理工具源码
有些人在写Javascript时并不会去缩进代码,导致代码的可读性非常差,下面这个源码就是专为没有缩进过的JS代码所准备的,他可以将JS代码由杂乱无章变得井井有条,好了话不多说上源码。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8;charset=utf-8" />
<title>JavaScript在线整理工具</title>
</head>
<body>
<script type="text/javascript">
function JsDecoder()
{
this.s = "";
this.len = 0;
this.i = 0;
this.lvl = 0;
this.code = [""];
this.row = 0;
this.switches = [];
this.lastWord = "";
this.nextChar = "";
this.prevChar = "";
this.isAssign = false;
this.decode = function ()
{
this.s = this.s.replace(/[\r\n\f]+/g, "\n");
this.len = this.s.length;
while (this.i < this.len) {
var a = this.s.charAt(this.i);
this.charInit();
this.switch_c(a);
this.i++
}
return this.code.join("\n");
};
this.switch_c = function (a)
{
switch (a)
{
case "\n":
this.linefeed();
break;
case " ":
case "\t":
this.space();
break;
case "{":
this.blockBracketOn();
break;
case "}":
this.blockBracketOff();
break;
case ":":
this.colon();
break;
case ";":
this.semicolon();
break;
case "(":
this.bracketOn();
break;
case ")":
this.bracketOff();
break;
case "[":
this.squareBracketOn();
break;
case "]":
this.squareBracketOff();
break;
case '"':
case "'":
this.quotation(a);
break;
case "/":
if ("/" == this.nextChar) {
this.lineComment()
}
else {
if ("*" == this.nextChar) {
this.comment()
}
else {
this.slash()
}
}
break;
case ",":
this.comma();
break;
case ".":
this.dot();
break;
case "~":
case "^":
this.symbol1(a);
break;
case "-":
case "+":
case "*":
case "%":
case "<":
case "=":
case ">":
case "?":
case ":":
case "&":
case "|":
case "/":
this.symbol2(a);
break;
case "!":
if ("=" == this.nextChar) {
this.symbol2(a)
}
else {
this.symbol1(a)
}
break;
default:
if (/\w/.test(a)) {
this.alphanumeric(a)
}
else {
this.unknown(a)
}
break
}
a = this.s.charAt(this.i);
if (!/\w/.test(a)) {
this.lastWord = "";
}
};
this.blockBracketOn = function ()
{
this.isAssign = false;
var f = this.nextNonWhite(this.i);
if ("}" == f)
{
var c = (this.prevChar == ")" ? " " : "");
this.write(c + "{");
this.lvl++;
return
}
if (/^\s*switch\s/.test(this.getCurrentLine())) {
this.switches.push(this.lvl)
}
var a = this.getCurrentLine();
var e = this.row;
var d = /(,)\s*(\w+\s*:\s*function\s*\([^\)]*\)\s*)$/;
if (d.test(a))
{
this.replaceLine(this.code[e].replace(d, "$1"));
this.writeLine();
var b = d.exec(a);
this.write(b[2])
}
if (/^\s*return\s*/.test(this.code[this.row]))
{
if (/^\s*return\s+\w+/.test(this.code[this.row])) {
this.writeLine()
}
else {
if (this.prevChar != " ") {
this.write(" ")
}
}
this.write("{");
this.writeLine();
this.lvl++;
return
}
if (/function\s*/.test(this.code[this.row]) || this.isBlockBig())
{
this.writeLine()
}
else {
if (this.prevChar != " " && this.prevChar != "\n" && this.prevChar != "(") {
this.write(" ")
}
}
this.write("{");
this.lvl++;
if ("{" != f) {
this.writeLine()
}
};
this.isBlockBig = function ()
{
var b = this.i + 1;
var d = 0;
var e = 0;
var a = 0;
while (b < this.len - 1) {
b++;
var f = this.s.charAt(b);
if (/\s/.test(f)) {
continue
}
if ("}" == f && e == a) {
break
}
if ("{" == f) {
e++
}
if ("}" == f) {
a++
}
d++;
if (d > 80) {
return true;
}
}
return (d > 80);
};
this.blockBracketOff = function ()
{
var l = this.nextNonWhite(this.i);
var k = this.prevNonWhite(this.i);
var n = this.getCurrentLine();
if (k != "{") {
if (n.length && l != ";" && l != "}" && l != ")" && l != ",") {
this.writeLine()
}
else {
if (n.length && k != ";" && l == "}" && this.isAssign) {
this.semicolon()
}
else
{
if (n.length && this.isAssign && k != ";") {
this.semicolon()
}
else
{
if (n.length && k != ";") {
if (/^\s*(else)?\s*return[\s(]+/i.test(n)) {
this.semicolon()
}
else {
this.writeLine()
}
}
}
}
}
}
this.write("}");
if ("," == l) {
this.write(",");
this.goNextNonWhite()
}
var j = this.nextManyNW(3);
if (j == "(),") {
this.write("(),");
this.goNextManyNW("(),");
this.writeLine()
}
else
{
if (j == "();") {
this.write("();");
this.goNextManyNW("();");
this.writeLine()
}
else
{
if (j == "():") {
this.write("()");
this.goNextManyNW("()");
this.write(" : ");
this.goNextNonWhite()
}
else
{
if ("{" == k)
{
if ("," == l && this.getCurrentLine().length < 80) {
this.write(" ")
}
else {
if (this.nextWord() || "}" == l) {
this.writeLine()
}
}
}
else
{
if (")" != l && "]" != l)
{
if ("," == l &&/^[\s\w,]+\)/.test(this.s.substr(this.i, 20))) {
this.write(" ")
}
else {
this.writeLine()
}
}
}
}
}
}
this.lvl--;
if (this.switches.length && this.switches[this.switches.length - 1] == this.lvl)
{
var m = this.row - 1;
var e = str_repeat(" ", this.lvl * 4);
var c = str_repeat(" ", (this.lvl + 1) * 4);
var g = new RegExp("^" + e + "(switch\\s|{)");
var d = new RegExp("^" + c + "(case|default)[\\s:]");
var b = new RegExp("^" + c + "[^\\s]");
while (m > 0)
{
m--;
if (g.test(this.code[m])) {
break
}
if (d.test(this.code[m])) {
continue
}
this.replaceLine(" " + this.code[m], m)
}
this.switches.pop()
}
if (this.sub) {
return
}
var h = /^(\s*else\s*if)\s*\(/;
var f = /^(\s*else)\s+[^{]+/;
var a = this.s.substr(this.i + 1, 100);
if (h.test(a))
{
this.i += h.exec(a)[1].length;
this.write("else if");
this.lastWord = "if";
this.fixSub("else if")
}
else
{
if (f.test(a))
{
this.i += f.exec(a)[1].length;
this.write("else");
this.lastWord = "else";
this.fixSub("else")
}
}
};
this.bracketOn = function ()
{
if (this.isKeyword() && this.prevChar != " " && this.prevChar != "\n") {
this.write(" (")
}
else {
this.write("(")
}
};
this.bracketOff = function ()
{
this.write(")");
if (this.sub) {
return
}
var j = new RegExp("^\\s*(if|for|while|do)\\s*\\([^{}]+\\)$", "i");
var l = this.getCurrentLine();
if (j.test(l))
{
var h = this.nextNonWhite(this.i);
if ("{" != h && ";" != h && ")" != h)
{
var b = 0;
var f = 0;
var g = false;
var d = false;
var e = false;
for (var a = 0; a < l.length; a++)
{
if (l.charAt(a) == "(") {
g = true;
b++
}
if (l.charAt(a) == ")") {
f++;
if (g && b == f) {
if (a == l.length - 1) {
e = true
}
else {
break
}
}
}
}
if (e) {
this.fixSub(j.exec(l)[1])
}
}
}
};
this.sub = false;
this.orig_i = null;
this.orig_lvl = null;
this.orig_code = null;
this.orig_row = null;
this.orig_switches = null;
this.restoreOrig = function (a)
{
this.sub = false;
if (!a) {
this.i = this.orig_i
}
this.lvl = this.orig_lvl;
this.code = this.orig_code;
this.row = this.orig_row;
this.switches = this.orig_switches;
this.prevCharInit();
this.lastWord = "";
this.charInit();
this.isAssign = false;
};
this.combineSub = function ()
{
for (i = 0; i < this.code.length; i++)
{
var a = this.orig_code[this.orig_row];
if (0 == i && a.length)
{
if (a.substr(a.length - 1, 1) != " ") {
this.orig_code[this.orig_row] += " "
}
this.orig_code[this.orig_row] += this.code[i].trim()
}
else {
this.orig_code[this.orig_row + i] = this.code[i];
}
}
};
this.fixSub = function (d)
{
if (this.sub) {
return
}
if ("{" == this.nextNonWhite(this.i)) {
return
}
var l = this.nextWord();
this.orig_i = this.i;
this.orig_lvl = this.lvl;
this.orig_code = this.code;
this.orig_row = this.row;
this.orig_switches = this.switches;
this.sub = true;
this.code = [""];
this.prevChar = "";
this.row = 0;
this.switches = [];
this.isAssign = false;
this.i++;
var k = 0;
var h = 0;
var g = 0;
if ("else if" == d) {
var e = false
}
var m = false;
var b = false;
var j = false;
while (!m && this.i < this.len)
{
var f = this.s.charAt(this.i);
this.charInit();
switch (f)
{
case "{":
k++;
break;
case "}":
k--;
if (0 == k && 0 == h && 0 == g && this.lvl - 1 == this.orig_lvl)
{
var a = this.nextWord();
if ("switch" == l) {
m = true;
break
}
if ("try" == l && "catch" == b) {
m = true;
break
}
if ("while" == l && "do" == b) {
m = true;
break
}
if ("if" == l) {}
if ("if" == d && "else" == a && "if" != l) {
m = true;
break
}
b = a
}
break;
case "(":
h++;
break;
case ")":
h--;
if ("else if" == d && 0 == h && !e)
{
if (this.nextNonWhite(this.i) == "{") {
this.write(f);
this.combineSub();
this.restoreOrig(true);
return
}
this.write(f);
this.combineSub();
this.restoreOrig(true);
this.fixSub("if");
return
}
break;
case "[":
g++;
break;
case "]":
g--;
break;
case ";":
if (0 == k && 0 == h && 0 == g && this.lvl == this.orig_lvl && "if" != l) {
m = true
}
break
}
if (-1 == k && h == 0 && g == 0 && this.prevNonWhite(this.i) != "}") {
this.write(";");
this.i--;
m = true
}
else {
if (k < 0 || h < 0 || g < 0) {
m = false;
break
}
else {
this.switch_c(f)
}
}
this.i++
}
this.i--;
if (m)
{
this.s = this.s.substr(0, this.orig_i + 1) + "{" + this.code.join("\n") + "}" + this.s.substr(this.i + 1);
this.len = this.s.length
}
this.restoreOrig(false);
};
this.squareBracketOn = function ()
{
this.checkKeyword();
this.write("[")
};
this.squareBracketOff = function ()
{
this.write("]")
};
this.isKeyword = function ()
{
return this.lastWord.length && this.keywords.indexOf(this.lastWord) !=- 1;
};
this.linefeed = function () {};
this.space = function ()
{
if (!this.prevChar.length) {
return
}
if (" " == this.prevChar || "\n" == this.prevChar) {
return
}
if ("}" == this.prevChar && "]" == this.nextChar) {}
this.write(" ");
return
};
this.checkKeyword = function ()
{
if (this.isKeyword() && this.prevChar != " " && this.prevChar != "\n") {
this.write(" ")
}
};
this.nextWord = function ()
{
var a = this.i;
var b = "";
while (a < this.len - 1)
{
a++;
var d = this.s.charAt(a);
if (b.length) {
if (/\s/.test(d)) {
break
}
else {
if (/\w/.test(d)) {
b += d
}
else {
break
}
}
}
else {
if (/\s/.test(d)) {
continue
}
else {
if (/\w/.test(d)) {
b += d
}
else {
break
}
}
}
}
if (b.length) {
return b
}
return false;
};
this.nextManyNW = function (e)
{
var a = "";
var b = this.i;
while (b < this.len - 1) {
b++;
var d = this.s.charAt(b);
if (!/^\s+$/.test(d)) {
a += d;
if (a.length == e) {
return a;
}
}
}
return false;
};
this.goNextManyNW = function (e)
{
var a = "";
var b = this.i;
while (b < this.len - 1)
{
b++;
var d = this.s.charAt(b);
if (!/^\s+$/.test(d))
{
a += d;
if (a == e) {
this.i = b;
this.charInit();
return true
}
if (a.length >= e.length) {
return false;
}
}
}
return false;
};
this.nextNonWhite = function (a)
{
while (a < this.len - 1) {
a++;
var b = this.s.charAt(a);
if (!/^\s+$/.test(b)) {
return b;
}
}
return false;
};
this.prevNonWhite = function (a)
{
while (a > 0) {
a--;
var b = this.s.charAt(a);
if (!/^\s+$/.test(b)) {
return b;
}
}
return false;
};
this.goNextNonWhite = function ()
{
var a = this.i;
while (a < this.len - 1)
{
a++;
var b = this.s.charAt(a);
if (!/^\s+$/.test(b)) {
this.i = a;
this.charInit();
return true;
}
}
return false;
};
this.colon = function ()
{
var a = this.getCurrentLine();
if (/^\s*case\s/.test(a) ||/^\s*default$/.test(a)) {
this.write(":");
this.writeLine()
}
else {
this.symbol2(":")
}
};
this.isStart = function ()
{
return this.getCurrentLine().length === 0;
};
this.backLine = function ()
{
if (!this.isStart) {
throw "backLine() may be called only at the start of the line"
}
this.code.length = this.code.length - 1;
this.row--
};
this.semicolon = function ()
{
this.isAssign = false;
if (this.isStart()) {
this.backLine()
}
this.write(";");
if (/^\s*for\s/.test(this.getCurrentLine())) {
this.write(" ")
}
else {
this.writeLine()
}
};
this.quotation = function (a)
{
this.checkKeyword();
var b = false;
this.write(a);
while (this.i < this.len - 1)
{
this.i++;
var d = this.s.charAt(this.i);
if ("\\" == d) {
b = (b ? false : true)
}
this.write(d);
if (d == a) {
if (!b) {
break
}
}
if ("\\" != d) {
b = false;
}
}
};
this.lineComment = function ()
{
this.write("//");
this.i++;
while (this.i < this.len - 1)
{
this.i++;
var a = this.s.charAt(this.i);
if ("\n" == a) {
this.writeLine();
break
}
this.write(a)
}
};
this.comment = function ()
{
this.write("/*");
this.i++;
var b = "";
var a = "";
while (this.i < this.len - 1)
{
this.i++;
a = b;
b = this.s.charAt(this.i);
if (" " == b || "\t" == b || "\n" == b)
{
if (" " == b) {
if (this.getCurrentLine().length > 100) {
this.writeLine()
}
else {
this.write(" ", true)
}
}
else {
if ("\t" == b) {
this.write(" ", true)
}
else {
if ("\n" == b) {
this.writeLine()
}
}
}
}
else {
this.write(b, true)
}
if ("/" == b && "*" == a) {
break
}
}
this.writeLine()
};
this.slash = function ()
{
var f = this.i - 1;
var j = this.s.charAt(f);
for (f = this.i - 1; f >= 0; f--) {
var e = this.s.charAt(f);
if (" " == e || "\t" == e) {
continue
}
j = this.s.charAt(f);
break
}
var l = /^\w+$/.test(j) || "]" == j || ")" == j;
var k = ("*" == this.prevChar);
if (l || k)
{
if (l)
{
if ("=" == this.nextChar) {
var m = this.prevChar == " " ? "" : " ";
this.write(m + "/")
}
else {
this.write(" / ")
}
}
else {
if (k) {
this.write("/ ")
}
}
}
else
{
if (")" == this.prevChar) {
this.write(" / ")
}
else
{
var g = "";
if ("=" == this.prevChar || ":" == this.prevChar) {
g += " /"
}
else {
g += "/"
}
var d = false;
while (this.i < this.len - 1)
{
this.i++;
var h = this.s.charAt(this.i);
if ("\\" == h) {
d = (d ? false : true)
}
g += h;
if ("/" == h) {
if (!d) {
break
}
}
if ("\\" != h) {
d = false;
}
}
this.write(g)
}
}
};
this.comma = function ()
{
this.write(", ");
var a = this.getCurrentLine();
if (a.replace(" ", "").length > 100) {
this.writeLine()
}
};
this.dot = function ()
{
this.write(".")
};
this.symbol1 = function (a)
{
if ("=" == this.prevChar && "!" == a) {
this.write(" " + a)
}
else {
this.write(a)
}
};
this.symbol2 = function (d)
{
if ("+" == d || "-" == d) {
if (d == this.nextChar || d == this.prevChar) {
this.write(d);
return
}
}
var a = (this.prevChar == " " ? "" : " ");
var b = " ";
if ("(" == this.prevChar) {
a = "";
b = ""
}
if ("-" == d && (">" == this.prevChar || ">" == this.prevChar)) {
this.write(" " + d);
return
}
if (this.symbols2.indexOf(this.prevChar) !=- 1)
{
if (this.symbols2.indexOf(this.nextChar) !=- 1) {
this.write(d + (this.nextChar == "!" ? " " : ""))
}
else {
this.write(d + b)
}
}
else
{
if (this.symbols2.indexOf(this.nextChar) !=- 1) {
this.write(a + d)
}
else {
this.write(a + d + b)
}
}
if ("=" == d &&/^[\w\]]$/.test(this.prevNonWhite(this.i)) &&/^[\w\'\"\[]$/.test(this.nextNonWhite(this.i))) {
this.isAssign = true;
}
};
this.alphanumeric = function (a)
{
if (this.lastWord) {
this.lastWord += a
}
else {
this.lastWord = a
}
if (")" == this.prevChar) {
a = " " + a
}
this.write(a);
};
this.unknown = function (a)
{
this.write(a)
};
this.charInit = function ()
{
if (this.len - 1 === this.i) {
this.nextChar = ""
}
else {
this.nextChar = this.s.charAt(this.i + 1);
}
};
this.write = function (d, b)
{
if (b)
{
if (!/\s/.test(d))
{
if (this.code[this.row].length < this.lvl * 4) {
this.code[this.row] += str_repeat(" ", this.lvl * 4 - this.code[this.row].length)
}
}
this.code[this.row] += d
}
else
{
if (0 === this.code[this.row].length) {
var a = ("}" == d ? this.lvl - 1 : this.lvl);
for (var c = 0; c < a; c++) {
this.code[this.row] += " "
}
this.code[this.row] += d
}
else {
this.code[this.row] += d
}
}
this.prevCharInit()
};
this.writeLine = function ()
{
this.code.push("");
this.row++;
this.prevChar = "\n";
};
this.replaceLine = function (a, b)
{
if ("undefined" == typeof b) {
b = false
}
if (b !== false) {
if (!/^\d+$/.test(b) || b < 0 || b > this.row) {
throw "replaceLine() failed: invalid row=" + b
}
}
if (b !== false) {
this.code[b] = a
}
else {
this.code[this.row] = a
}
if (b === false || b == this.row) {
this.prevCharInit()
}
};
this.prevCharInit = function ()
{
this.prevChar = this.code[this.row].charAt(this.code[this.row].length - 1);
};
this.writeTab = function ()
{
this.write(" ");
this.prevChar = " ";
};
this.getCurrentLine = function ()
{
return this.code[this.row];
};
this.symbols1 = "~!^";
this.symbols2 = "-+*%<=>?:&|/!";
this.keywords = ["abstract", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
"continue", "default", "delete", "do", "double", "else", "extends", "false", "final", "finally", "float",
"for", "function", "goto", "if", "implements", "import", "in", "instanceof", "int", "interface", "long",
"native", "new", "null", "package", "private", "protected", "public", "return", "short", "static",
"super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "typeof",
"var", "void", "while", "with"]
}
if (typeof Array.prototype.indexOf == "undefined")
{
Array.prototype.indexOf = function (b)
{
for (var a = 0; a < this.length; a++) {
if ((typeof this [a] == typeof b) && (this [a] == b)) {
return a;
}
}
return - 1;
}
}
if (!String.prototype.trim) {
String.prototype.trim = function ()
{
return this.replace(/^\s*|\s*$/g, "");
}
}
function str_repeat(c, b)
{
ret = "";
for (var a = 0; a < b; a++) {
ret += c
}
return ret
}
var debug_w;
function debug(d, a)
{
if (!debug_w)
{
var b = 600;
var k = 600;
var j = (screen.width / 2 - b / 2);
var h = (screen.height / 2 - k / 2);
debug_w = window.open("", "", "scrollbars=yes,resizable=yes,width=" + b + ",height=" + k + ",screenX=" + (j) + ",screenY=" + h + ",left=" + j + ",top=" + h);
debug_w.document.open();
debug_w.document.write("<html><head><style>body{margin: 1em;padding: 0;font-family: courier new; font-size: 12px;}h1,h2{margin: 0.2em 0;}</style></head><body><h1>Debug</h1></body></html>");
debug_w.document.close()
}
var g = "";
if ("undefined" !== typeof a && a.length) {
g = "<h2>" + a + "</h2>\n"
}
if ("object" === typeof d) {
for (var c = 0; c < d.length; c++) {
g += "[" + c + "] => " + d[c] + "\n"
}
}
else {
if ("string" == typeof d) {
g += d
}
else {
try {
g += d.toString()
}
catch (f) {}
g += " (" + typeof d + ")"
}
}
debug_w.document.body.innerHTML += "<pre>" + g + "</pre>"
};
</script>
<script type="text/javascript">
function JsColorizer()
{
this.color = {
keyword : "#0000FF", object : "#FF0000", quotation : "#FF00FF", comment : "#008000"
};
this.s = "";
this.i = 0;
this.len = 0;
this.ret = "";
this.lastWord = "";
this.nextChar = "";
this.prevChar = "";
this.code = [""];
this.row = 0;
this.times =
{
quotation : 0, quotation_calls : 0, lineComment : 0, lineComment_calls : 0, comment : 0, comment_calls : 0,
slash : 0, slash_calls : 0, word : 0, word_calls : 0
};
this.write = function (a)
{
this.code[this.row] += a;
if (a.length == 1) {
this.prevChar = a
}
else {
this.prevCharInit()
}
};
this.writeLine = function ()
{
this.code.push("");
this.row++;
this.prevChar = "\n";
};
this.prevCharInit = function ()
{
this.prevChar = this.code[this.row].charAt(this.code[this.row].length - 1);
};
this.showTimes = function ()
{
var a = "";
for (var c in this.times)
{
var b = this.times[c];
if (/_calls/.test(c)) {
a += c + ": " + b + "\n"
}
else {
a += c + ": " + time_round(b) + " sec\n"
}
}
return a;
};
this.colorize = function ()
{
this.len = this.s.length;
while (this.i < this.len)
{
var a = this.s.charAt(this.i);
if (this.len - 1 == this.i) {
this.nextChar = ""
}
else {
this.nextChar = this.s.charAt(this.i + 1)
}
switch (a)
{
case "\n":
if (this.lastWord.length) {
this.word()
}
this.lastWord = "";
this.writeLine();
break;
case "'":
case '"':
if (this.lastWord.length) {
this.word()
}
this.lastWord = "";
this.quotation(a);
break;
case "/":
if (this.lastWord.length) {
this.word()
}
this.lastWord = "";
if ("/" == this.nextChar) {
this.lineComment()
}
else {
if ("*" == this.nextChar) {
this.comment()
}
else {
this.slash()
}
}
break;
default:
if (/^\w$/.test(a)) {
this.lastWord += a
}
else {
if (this.lastWord.length) {
this.word()
}
this.lastWord = "";
this.write(a)
}
break
}
this.i++
}
this.write(this.lastWord);
return this.code.join("\n");
};
this.quotation = function (a)
{
var b = a;
var d = false;
while (this.i < this.len - 1)
{
this.i++;
var e = this.s.charAt(this.i);
if ("\\" == e) {
d = (d ? false : true)
}
b += e;
if (e == a) {
if (!d) {
break
}
}
if ("\\" != e) {
d = false;
}
}
this.write('<font color="' + this.color.quotation + '">' + b + "</font>")
};
this.lineComment = function ()
{
var a = "//";
this.i++;
while (this.i < this.len - 1) {
this.i++;
var b = this.s.charAt(this.i);
a += b;
if ("\n" == b) {
break
}
}
this.write('<font color="' + this.color.comment + '">' + a + "</font>")
};
this.comment = function ()
{
var a = "/*";
this.i++;
var d = "";
var b = "";
while (this.i < this.len - 1) {
this.i++;
b = d;
d = this.s.charAt(this.i);
a += d;
if ("/" == d && "*" == b) {
break
}
}
this.write('<font color="' + this.color.comment + '">' + a + "</font>")
};
this.slash = function ()
{
var h = this.i - 1;
var k = this.s.charAt(h);
for (h = this.i - 1; h >= 0; h--) {
var g = this.s.charAt(h);
if (" " == g || "\t" == g) {
continue
}
k = this.s.charAt(h);
break
}
var e = /^\w+$/.test(k) || "]" == k || ")" == k;
var d = ("*" == this.prevChar);
if (e || d)
{
if (e) {
if ("=" == this.nextChar) {
this.write("/")
}
else {
this.write("/")
}
}
else {
if (d) {
this.write("/")
}
}
}
else
{
if (")" == this.prevChar) {
this.write("/")
}
else
{
var f = "";
if ("=" == this.prevChar) {
f += "/"
}
else {
f += "/"
}
var i = false;
while (this.i < this.len - 1)
{
this.i++;
var j = this.s.charAt(this.i);
if ("\\" == j) {
i = (i ? false : true)
}
f += j;
if ("/" == j) {
if (!i) {
break
}
}
if ("\\" != j) {
i = false;
}
}
this.write('<font color="' + this.color.quotation + '">' + f + "</font>")
}
}
};
this.word = function ()
{
if (this.keywords.indexOf(this.lastWord) !=- 1) {
this.write('<font color="' + this.color.keyword + '">' + this.lastWord + "</font>")
}
else
{
if (this.objects.indexOf(this.lastWord) !=- 1) {
this.write('<font color="' + this.color.object + '">' + this.lastWord + "</font>")
}
else {
this.write(this.lastWord)
}
}
};
this.keywords = ["abstract", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
"continue", "default", "delete", "do", "double", "else", "extends", "false", "final", "finally", "float",
"for", "function", "goto", "if", "implements", "import", "in", "instanceof", "int", "interface", "long",
"native", "new", "null", "package", "private", "protected", "public", "return", "short", "static",
"super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "typeof",
"var", "void", "while", "with"];
this.objects = ["Anchor", "anchors", "Applet", "applets", "Area", "Array", "Button", "Checkbox", "Date",
"document", "FileUpload", "Form", "forms", "Frame", "frames", "Hidden", "history", "Image", "images",
"Link", "links", "Area", "location", "Math", "MimeType", "mimeTypes", "navigator", "options", "Password",
"Plugin", "plugins", "Radio", "Reset", "Select", "String", "Submit", "Text", "Textarea", "window"];
};
</script>
<script type="text/javascript">
var base_code = "";
var jsdecoder;
var jscolorizer;
var code = "";
var time = 0;
function decode()
{
code = "";
base_code = "";
jsdecoder = new JsDecoder();
jscolorizer = new JsColorizer();
if ($("msg").innerHTML.length) {
do_clean_init()
}
else {
jsdecoder.s = $("a1").value;
do_decode_init()
}
}
function do_decode_init()
{
$("msg").innerHTML += "整理 .. ";
setTimeout(do_decode, 50)
}
function do_decode()
{
time = time_start();
try {
code = jsdecoder.decode();
base_code = code
}
catch (a) {
$("msg").innerHTML += "error<br><br>" + new String(a).replace(/\n/g, "<br>");
return
}
$("msg").innerHTML += "完成 (" + time_end(time) + " 秒)<br>";
setTimeout(do_colorize_init, 50)
}
function do_colorize_init()
{
$("msg").innerHTML += "上色 .. ";
setTimeout(do_colorize, 50)
}
function do_colorize()
{
time = time_start();
code = code.replace(/&/g, "&");
code = code.replace(/</g, "<");
code = code.replace(/>/g, ">");
jscolorizer.s = code;
try {
code = jscolorizer.colorize()
}
catch (a) {
$("msg").innerHTML += "error<br><br>" + new String(a).replace(/\n/g, "<br>");
return
}
$("msg").innerHTML += "完成 (" + time_end(time) + " 秒)<br>";
setTimeout(do_insert_init, 50)
}
function do_insert_init()
{
$("msg").innerHTML += "显示代码 .. ";
setTimeout(do_insert, 50)
}
function do_insert()
{
time = time_start();
try
{
code = new String(code);
code = code.replace(/(\r\n|\r|\n)/g, "<br>\n");
code = code.replace(/<font\s+/gi, "<font@@@@@");
code = code.replace(/( |\t)/g, " ");
code = code.replace(/<font@@@@@/gi, "<font ");
code = code.replace(/\n$/, "");
var c = 0;
var h = code.indexOf("\n");
while (h !=- 1) {
c++;
h = code.indexOf("\n", h + 1)
}
c++;
pad = new String(c).length;
var a = "";
for (var b = 0; b < c; b++)
{
var f = pad - new String(b + 1).length;
var g = new String(b + 1);
for (k = 0; k < f; k++) {
g = " " + g
}
g += " ";
a += '<div style="background: #fff; color: #666;">' + g + "</div>"
}
$("lines").innerHTML = a;
$("code_area").style.display = "block";
$("sel_all").style.display = "block";
$("a2").innerHTML = code
}
catch (d) {
$("msg").innerHTML += "error<br><br>" + new String(d).replace(/\n/g, "<br>");
return
}
$("msg").innerHTML += "完成 (" + time_end(time) + " 秒)";
code = ""
}
function do_clean_init()
{
$("msg").innerHTML = "";
do_clean()
}
function do_clean()
{
time = time_start();
$("code_area").style.display = "none";
base_code = "";
$("sel_all").style.display = "none";
$("insert_div").style.display = "none";
jsdecoder.s = $("a1").value;
do_decode_init()
}
function insert_textarea()
{
$("insert_div").style.display = "block";
$("insert_area").value = base_code;
$("insert_area").focus();
$("insert_area").select()
}
function $(a)
{
return document.getElementById(a)
}
function time_micro()
{
var a = new String(new Date().getTime());
a = a.substr(0, a.length - 3) + "." + a.substr(a.length - 3, 3);
return parseFloat(a)
}
function time_start()
{
return time_micro()
}
function time_get(a)
{
return time_micro() - a
}
function time_end(a)
{
return time_round(time_micro() - a)
}
function time_round(a)
{
a = Math.round(a * 100) / 100;
if (a === 0) {
a = 0.01
}
return a;
};
</script>
<div align="center"><textarea id="a1" style="height:200px;width:95%;">请把你需要格式化的内容粘贴在这里!</textarea></div>
<p />
<div align="center">
<input type="button" onClick="decode()" value="格式化" />
</div>
<div id="msg" style="font-family: courier new; font-size: 12px; background: #ffffd7; margin: 1em 0;text-align:left"></div>
<div id="sel_all" style="display: none; margin: 1em 0; text-align:left"><a href="javascript:void(0)" onClick="insert_textarea()"><u>在textarea中显示</u></a></div>
<div id="insert_div" style="display: none; margin: 1em 0;text-align:center"><textarea id="insert_area" style="height:300px;width:95%;"></textarea></div>
<div id="code_area" style="display: none;">
<table cellspacing="0" cellpadding="0" style="font-family: courier new; font-size: 12px;" width="100%">
<tr>
<td valign="top" id="lines" width="10"></td>
<td nowrap id="a2" style="background: #f5f5f5;text-align:left"></td>
</tr>
</table>
</html>
附上此源码地址:Javascript代码在线整理工具