JS格式化工具(转)
<html>
<head>
<title>JS格式化工具 </title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<style> * { padding:0px; margin:5px; font-size:13px; font-family: arial 宋体; }
body { overflow:auto; border:0px none black; background-color:buttonface; }
li { margin:0px 0px 0px 40px; padding:2px 4px; } .quote { color:#999; }
.comments { color: #009090; }
.indent { margin-left:25px; }
.regexp { color:#F000F0; } #divTools { height:20px; border-bottom:1px solid #555; padding-left:15px; }
#divTools a { color:navy; text-decoration:none; height:20px; line-height:20px; padding:0px 25px; }
#divTools a:hover { color:white; background-color:navy; text-decoration:none; height:20px; line-height:20px; }
#divJSInput { display:none; width:600px; height:450px; border:2px outset buttonface; position:absolute; background-color:buttonface; z-Index:2; }
#divJSInputTitle { color:white; background-color:navy; height:20px; line-height:20px; padding:0px 10px; cursor:default; }
#txtJSInput { width:598px; height:406px; overflow:auto; padding:4px 8px; background-color:white;}
#divJSInputBar { height:24px; padding:0px 4px; }
#divJSInputBar input { width:110px; height:22px; border:1px solid #555; line-height:20px; }
#divJSOutput { background-color:white; border:1px inset buttonface; width:100%; height:500px; overflow:auto; }
#divWaiting { display:none; width:400px; height:60px; border:1px solid buttonface; position:absolute; background-color:#E0F0F0; z-Index:3; text-align:center; padding-top:10px; }
#divWaiting input { width:140px; height:22px; border:1px solid #555; line-height:20px; cursor:default; margin-top:4px; }
</style>
<script type="text/javascript"> window.onload=init; //------------------ // Static Variable //------------------ var KEYWORDS="abstract 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 null package private protected public reset return short static super switch synchronized this throw transient true try var void while with"; var OBJECTS="Anchor Applet Area Arguments Array Boolean Button Checkbox Collection Crypto Date Dictionary Document Drive Drives Element Enumerator Event File FileObject FileSystemObject FileUpload Folder Folders Form Frame Function Global Hidden History HTMLElement Image Infinity Input JavaArray JavaClass JavaObject JavaPackage JSObject Layer Link Math MimeType Navigator Number Object Option Packages Password Plugin PrivilegeManager Random RegExp Screen Select String Submit Text Textarea URL VBArray Window WScript"; var METHODS_PROPERTIES="above abs acos action activeElement alert alinkColor all altKey anchor anchors appCodeName applets apply appName appVersion arguments arity asin assign atan atan2 atob availHeight availLeft availTop availWidth ActiveXObject back background below bgColor big blink blur bold border borderWidths bottom btoa button call callee caller cancelBubble captureEvents ceil charAt charCodeAt charset checked children classes className clear clearInterval clearTimeout click clientInformation clientX clientY close closed colorDepth compile complete concat confirm constructir contains contextual cookie cos crypto ctrlKey current data defaultCharset defaultChecked defaultSelected defaultStatus defaultValue description disableExternalCapture disablePrivilege document domain E Echo element elements embeds enabledPlugin enableExternalCapture enablePrivilege encoding escape eval event exec exp expando FromPoint fgColor fileName find fixed floor focus fontColor fontSize form forms forward frames fromCharCode fromElement getAttribute get getClass getDate getDay getFullYear getHours getMember getMilliseconds getMinutes getMonth getSeconds getSelection getSlot getTime getTimezoneOffset getUTCDate getUTCDay getUTCFullYear getUTCHours getUTCMilliseconds getUTCMinutes getUTCMonth getUTCSeconds getWindow getYear global go HandleEvent Height hash hidden history home host hostName href hspace id ids ignoreCase images index indexOf inner innerHTML innerText innerWidth insertAdjacentHTML insertAdjacentText isFinite isNAN italics java javaEnabled join keyCode Links LN10 LN2 LOG10E LOG2E lang language lastIndex lastIndexOf lastMatch lastModified lastParen layers layerX layerY left leftContext length link linkColor load location locationBar log lowsrc MAX_VALUE MIN_VALUE margins match max menubar method mimeTypes min modifiers moveAbove moveBelow moveBy moveTo moveToAbsolute multiline NaN NEGATIVE_INFINITY name navigate navigator netscape next number offscreenBuffering offset offsetHeight offsetLeft offsetParent offsetTop offsetWidth offsetX offsetY onabort onblur onchange onclick ondblclick ondragdrop onerror onfocus onHelp onkeydown onkeypress onkeyup onload onmousedown onmousemove onmouseout onmouseover onmouseup onmove onreset onresize onsubmit onunload open opener options outerHeight outerHTML outerText outerWidth POSITIVE_INFINITY PI paddings pageX pageXOffset pageY pageYOffset parent parentElement parentLayer parentWindow parse parseFloat parseInt pathname personalbar pixelDepth platform plugins pop port pow preference previous print prompt protocol prototype push random readyState reason referrer refresh releaseEvents reload removeAttribute removeMember replace resizeBy resizeTo returnValue reverse right rightcontext round SQRT1_2 SQRT2 screenX screenY scroll scrollbars scrollBy scrollIntoView scrollTo search select selected selectedIndex self setAttribute setDay setFullYear setHotkeys setHours setInterval setMember setMilliseconds setMinutes setMonth setResizable setSeconds setSlot setTime setTimeout setUTCDate setUTCFullYear setUTCHours setUTCMillseconds setUTCMinutes setUTCMonth setUTCSeconds setYear setZOptions shift shiftKey siblingAbove siblingBelow signText sin slice smallsort source sourceIndex splice split sqrt src srcElement srcFilter status statusbar stop strike style sub submit substr substring suffixes sun sup systemLanguage TYPE tagName tags taint taintEnabled tan target test text title toElement toGMTString toLocaleString toLowerCase toolbar top toString toUpperCase toUTCString type typeOf UTC unescape unshift untaint unwatch userAgent userLanguage value valueOf visibility vlinkColor vspace watch which width window write writeln x y zIndex"; var OPS="! $ % & * + - // / : < = > ? [ ] ^ | ~ is new sizeof typeof unchecked"; var regKW=new RegExp("(\\W"+KEYWORDS.replace(/ /g,"$)|(\\W")+"$)","g"); var regObj=new RegExp("(\\W"+OBJECTS.replace(/ /g,"$)|(\\W")+"$)","g"); var regMP=new RegExp("(\\W"+METHODS_PROPERTIES.replace(/ /g,"$)|(\\W")+"$)","g"); //var regOP=new RegExp("(\\W"+OPS.replace(/ /g,"$)|(\\W")+"$)","g"); var colorKW="blue"; var colorObj="red"; var colorMP="#FF8000"; var colorOP="#004000"; //------------------ // Global Variables //------------------ var divJSInput, txtJSInput, divJSOutput, divWaiting, spnProcess; var glbStr, glbP, glbRe, curRe, glbTimer; function init(){ // init global variables divJSInput=document.getElementByIdx("divJSInput"); txtJSInput=document.getElementByIdx("txtJSInput"); divJSOutput=document.getElementByIdx("divJSOutput"); divWaiting=document.getElementByIdx("divWaiting"); spnProcess=document.getElementByIdx("spnProcess"); // init window state maximizeWindow(); divJSOutput.style.width=document.body.clientWidth-2; divJSOutput.style.height=document.body.clientHeight-26; // init global events divJSInput.onkeydown=divJSInput_keydown; } //------------------ // event scripts //------------------ function divJSInput_keydown(e){ var e=window.event?window.event:e; var srcEle=e.srcElement?e.srcElement:e.target; var sel; if(e.keyCode==27)hideJSInput(); if(e.keyCode==13&&e.ctrlKey)execJSInput(); if(e.keyCode==9&&srcEle==txtJSInput){ document.selection.createRange().text="\t"; return(false); // not support FF } } //------------------ // functional scripts //------------------ function showJSInput(){ with(divJSInput.style){ display="block"; left=(document.body.clientWidth-divJSInput.offsetWidth)/2; top=(document.body.clientHeight-divJSInput.offsetHeight)/2; } txtJSInput.focus(); return(false); } function hideJSInput(){ divJSInput.style.display="none"; } function execJSInput(){ hideJSInput(); divJSOutput.innerHTML=""; glbStr=txtJSInput.value.replace(/\r\n[ \t]+/gi,"\r\n").replace(/(\r\n)+/gi,"\r\n"); glbP=0; curRe=glbRe=document.createElement("div"); divJSOutput.appendChild(glbRe); glbRe.className="codeRoot"; showWait(); core_analysis(); } function showWait(){ document.body.style.cursor="wait"; with(divWaiting.style){ display="block"; left=(document.body.clientWidth-divWaiting.offsetWidth)/2; top=(document.body.clientHeight-divWaiting.offsetHeight)/2; } spnProcess.innerHTML="0.00% ( 0 / 0 )" return(false); } function stopExec(){ document.body.style.cursor=""; divWaiting.style.display="none"; txta.value=divJSOutput.innerHTML; try{ clearTimeout(glbTimer); } catch(e){ } return(false); } function core_analysis(){ var str=" ", c="", lastState="", seq, intNextQuote, intTemp, intCount, intWordStart; spnProcess.innerHTML=parseFloat(glbP/glbStr.length*100).toFixed(2)+"% ( "+glbP+" / "+glbStr.length+" )"; for(var i=glbP; i<glbStr.length; i++){ c=glbStr.charAt(i); str+=htmlEncode(c); switch(c){ case "\r": case " ": case "\t": if(lastState=="\r\n"){ str=" "; break; } if(c.match(/\W/)&&glbStr.charAt(i-1).match(/\w/)){ str=str.substring(0,str.length-htmlEncode(c).length); str=str.replace(regKW,clKW).replace(regObj,clObj).replace(regMP,clMP)+htmlEncode(c); } break; case "\n": case ";": if(lastState=="\r\n"){ str=" "; break; } outputLn(str); str=" "; lastState="\r\n"; if(i-glbP>200){ glbP=i+1; glbTimer=setTimeout(core_analysis); return; } break; case "\"": intNextQuote=i; while(intNextQuote!=-1&&intNextQuote<glbStr.length){ intNextQuote=glbStr.indexOf("\"",intNextQuote+1); if(intNextQuote==-1||glbStr.charAt(intNextQuote-1)!="\\")break; intCount=0; intTemp=intNextQuote; while(glbStr.charAt(--intTemp)=="\\")intCount++; if(intCount%2==0)break; } if(intNextQuote==-1)break; str+="<span class=\"quote\">"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"<\/span>\""; i=intNextQuote; lastState=""; break; case "\'": intNextQuote=i; while(intNextQuote!=-1&&intNextQuote<glbStr.length){ intNextQuote=glbStr.indexOf("\'",intNextQuote+1); if(intNextQuote==-1||glbStr.charAt(intNextQuote-1)!="\\")break; intCount=0; intTemp=intNextQuote; while(glbStr.charAt(--intTemp)=="\\")intCount++; if(intCount%2==0)break; } if(intNextQuote==-1)break; str+="<span class=\"quote\">"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"<\/span>\'"; i=intNextQuote; lastState=""; break; case "\/": if(glbStr.charAt(i+1)=="\/"){ intNextQuote=i; intNextQuote=glbStr.indexOf("\r\n",intNextQuote+1); if(intNextQuote==-1)intNextQuote=glbStr.length; str=str.substring(0,str.length-1); str+="<span class=\"comments\">\/"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"<\/span>"; i=intNextQuote; } else if(glbStr.charAt(i+1)=="*"){ intNextQuote=i; intNextQuote=glbStr.indexOf("*\/",intNextQuote+1); if(intNextQuote==-1)return; str=str.substring(0,str.length-1); str+="<span class=\"comments\">\/"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"*\/<\/span>"; i=intNextQuote+1; } else if(str.match(/[=(][ \t]*\//)){ intNextQuote=i; while(intNextQuote!=-1&&intNextQuote<glbStr.length){ intNextQuote=glbStr.indexOf("\/",intNextQuote+1); if(intNextQuote==-1||glbStr.charAt(intNextQuote-1)!="\\")break; intCount=0; intTemp=intNextQuote; while(glbStr.charAt(--intTemp)=="\\")intCount++; if(intCount%2==0)break; } if(intNextQuote==-1)break; str+="<span class=\"regexp\">"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"<\/span>\/"; i=intNextQuote; lastState=""; } lastState=""; break; case "{": outputLn(str); str=" "; seq=document.createElement("div"); seq.className="indent"; curRe.appendChild(seq); curRe=seq; lastState="\r\n"; if(i-glbP>200){ glbP=i+1; glbTimer=setTimeout(core_analysis); return; } break; case "}": outputLn(str.substring(0,str.length-1)); str="} "; lastState=""; curRe=curRe.parentNode; break; default: if(c.match(/\w/)&&glbStr.charAt(i-1).match(/\W/)){ intWordStart=i; } if(c.match(/\W/)&&glbStr.charAt(i-1).match(/\w/)){ str=str.substring(0,str.length-htmlEncode(c).length); str=str.replace(regKW,clKW).replace(regObj,clObj).replace(regMP,clMP)+htmlEncode(c); } lastState=""; break; } } if(i==glbStr.length){ if(str!=""){ outputLn(str); str=" "; } stopExec(); } } function outputLn(theStr){ var seq=document.createElement("p"); seq.innerHTML=theStr; curRe.appendChild(seq); } function clKW(str){ return(str.charAt(0)+str.substring(1).fontcolor(colorKW)); } function clObj(str){ return(str.charAt(0)+str.substring(1).fontcolor(colorObj)); } function clMP(str){ return(str.charAt(0)+str.substring(1).fontcolor(colorMP)); } function clOP(str){ return(str.charAt(0)+str.substring(1).fontcolor(colorOP)); } //------------------ // global scripts //------------------ function maximizeWindow(){ window.moveTo(0,0); window.resizeTo(screen.availWidth,screen.availHeight); } function htmlEncode(strS){ return(strS.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/ /g," ").replace(/\r\n/g,"<br\/>")); } </script>
</head>
<body>
<div id="divTools">
<a href="#" onclick="return(showJSInput());">点击我输入要格式化的JS</a>
</div>
<div id="divJSInput">
<div id="divJSInputTitle">请输入JS:-</div>
<textarea id="txtJSInput"></textarea>
<div id="divJSInputBar">
<input type="button" value="OK" onclick="execJSInput();" />
<input type="button" value="Cancel" onclick="hideJSInput();" />
</div>
</div>
<div id="divJSOutput"></div>
<textarea rows=20 cols=200 id="txta">
</textarea>
<div id="divWaiting">
Processing...<span id="spnProcess"></span><br>
<input type="button" value="Stop" onclick="stopExec();" />
</div>
</body>
</html>
JS格式化工具(转)的更多相关文章
- 推荐两款好用的JS格式化工具
工具一: 直接在Chrome浏览器中,F12,打开Sources栏,找到JS文件,点击下面的花括号即可. 工具二: 使用notepad++ 格式化JS文件. 1.下载 jstool 插件(https: ...
- 新一代记事本“Notepad++”个性化设置备份
Notepad++是一套非常有特色的自由软件的纯文字编辑器(许可证:GPL),有完整的中文化接口及支援多国语言撰写的功能(UTF8 技术).它的功能比 Windows 中的 Notepad(记事簿)强 ...
- webqq 获得好友列表hash算法 获得最新hash的方法
webqq获得好友列表的hash算法,大约每一个月中旬会变动一次.知道怎么获得他就能够了. js文件路径 http://web.qstatic.com/webqqpic/pubapps/0/50/eq ...
- 反编译 轻松调频 Android APP 下载“飞鱼秀”录音
经常听“飞鱼秀”,但是由于时间的原因,只能听回放,但是轻松调频的APP做的有点儿... 听回放的时候经常会中断,还不能拖动进度条,就决定把录音下载下来听. 1.反编译apk(Android反编译过程见 ...
- 反爬虫破解系列-汽车之家利用css样式替换文字破解方法
网站: 汽车之家:http://club.autohome.com.cn/ 以论坛为例 反爬虫措施: 在论坛发布的贴子正文中随机抽取某几个字使用span标签代替,标签内容位空,但css样式显示为所代替 ...
- javascrpt 页面格式化页面
下面这个页面,格式化javaScript <html> <head> <title>JS格式化工具 </title> <meta http-equ ...
- jQuery Cloud Zoom:图片放大镜插件 破解插件
/* Cloud Zoom 10 Site License (CZ01-10). Version 3.1 rev 1312051822 */ (function(e) { function s(a) ...
- JS Nice – JavaScript 代码美化和格式化工具
JS Nice 是一款让经过混淆处理的 JavaScript 代码可读更好的工具.它使用一种新型的用于 JavaScript 代码美化的去混淆和去压缩引擎.JSNice 采用先进的机器学习和程序分析技 ...
- JavaScript的js文件压缩和格式化工具
JavaScriptcompressor.com这个网站可是大名鼎鼎啊.以前在找到过压缩 Javascript 代码的程序,一直在用,感觉效果不错.域名是: http://javascriptcomp ...
随机推荐
- 【Mongodb教程 第二课 】 MongoDB 创建数据库 use 命令
use 命令 MongoDB use DATABASE_NAME 用于创建数据库.该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库. 语法: use DATABASE 语句的基本语法如 ...
- mysql字段A复制到字段B,并替换指定字符
',字段a); eg:update `hy_b_pro` set goldWeight=jinJinZhong;
- 【转载】在VS2008中使用WSE 3.0过程全记录
WSE全称是Web Service Enhancement,提供了更好的安全性实现,以及大对象传输的设计. 有关WSE的一些介绍,如果不清楚,可以参考下面的链接 官方介绍:http://www.mic ...
- 移动APP怎样保存用户password
<span style="font-size:14px;">为了更好的用户体验,移动APPclient一般都会将用户信息进行保存以便兴许能够自己主动登录.</sp ...
- unable to instantiate activity...
Activity跳转到Activity,后来由于项目需要将第二个Activity改成继承FragmentActivity,跳转报错...无法初始化Activity,找不到class云云.. 最后是将b ...
- 可用内存free不足 hadoop3 无法启动 手动释放缓存 cache
[root@hadoop3 hadoop]# xlfg total used free shared buff/cache availableMem: 15 0 2 0 12 14Swap: 7 0 ...
- 如何正确使用log4j
如何正确使用log4j? 关键字: 如何正确使用log4j? Java Web开发的过程中,通过会采用输出log的方式来进行调试,产品上线之后,也通常使用log来记录系统的运行状态.最简单的输出l ...
- 转3xian之所在 (一位ACM大牛的博文)
3xian的经历和见解...我深思... 最后一天,漫天飘起了雪花,假装欢送我离去. 这次WF之战不太顺利,早期的C题大概花了1秒钟构思,然而由于输出格式多了一个空格直到两个半小时才逃脱Wrong A ...
- SpringBoot项目以服务器方式启动
SpringBoot项目,如果未引入Web相关依赖,不会以服务器方式进行启动,会以应用的方式启动并结束 <dependency> <groupId>org.springfram ...
- bzoj 1640||1692: [Usaco2007 Dec]队列变换【后缀数组】
注意输出是80字符个一行!! 首先贪心很显然,就是两头尽量拿小的. 然后需要处理两头一样的情况,显然是选字典序小的一串,把数组反着接在原数组后面,然后跑sa,判断的时候直接比较rk数组 #includ ...