📄 compressor-connector.js
字号:
function connectCompressor(form){
form.size.onblur=sizeValidateListener;
form.ratio.onblur=ratioValidateListener;
bindAvaliable(form,['syntaxCompression','trimBracket','internalPrefix']);
bindAvaliable(form,['textCompression','compatible','size',"ratio"]);
var value = '';
var ownerDocument = form.ownerDocument;
var updateInterval = window.setInterval(function(){
if(form.source.value!=value){
value = form.source.value;
var error;
try{
new Function(value);
error = '';
}catch(e){
error = e.message;
}
updateSource(ownerDocument,value);
ownerDocument.getElementById("error").innerHTML = error;
var compress = ownerDocument.getElementById("compress");
var analyse = ownerDocument.getElementById("analyse");
analyse.disabled = compress.disabled = !!error || !value;
compress.onclick = compressListener;
analyse.onclick = analyseListener;
}
},1000)
}
function analyseListener(){
submit(this.form,"report");
}
function compressListener(){
submit(this.form,"confuse");
}
function submit(form,action){
var ownerDocument = form.ownerDocument;
var xmlContent = ownerDocument.getElementById("xmlContent");
var data = ['<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">',
"<properties>"];
var exportList = getKeys(getCheckedMap(ownerDocument.getElementById("internalList")),false);
appendEntry(data,"#type",action);
appendEntry(data,"#export","default.*");
appendEntry(data,'default/__package__.js',"this.addScript('default.js',['"+exportList.join("','")+"'])");
var inputNames = ['syntaxCompression','trimBracket','internalPrefix',
'textCompression','compatible','size',"ratio",
"ascii","escapeScriptTag"];
var i = inputNames.length;
while(i--){
var name = inputNames[i];
var input = form[name];
if(input.type == "checkbox"){
appendEntry(data,"#"+name,input.checked+'');
}else{
appendEntry(data,"#"+name,input.value);
}
}
var debugCallList = getKeys(getCheckedMap(ownerDocument.getElementById("debugCallList")),true);
var featureList = getKeys(getCheckedMap(ownerDocument.getElementById("featureList")),true);
appendEntry(data,"#debugCalls",debugCallList.join(','));
appendEntry(data,"#features",featureList.join(','));
appendEntry(data,"default/default.js",form.source.value);
data.push("</properties>");
xmlContent.value = data.join('');
var win = open('about:blank','result','top=220px,left=220px,width=680px,height=240px,scrollbars=yes');
win.focus();
xmlContent.form.submit();
return false;
}
function appendEntry(data,path,text){
data.push("<entry key='",path,"'>") ;
data.push(/[<>&]/.test(text) && text.indexOf(']]>')<0?
"<![CDATA["+text + ']]>'
:text.replace(/[<>&]/g,xmlReplacer));
data.push("</entry>\n");
}
var keywords = {"for":true,"while":true,"if":true,"function":true}
function updateSource(ownerDocument,value){
var debugCallRegExp = /(\bfunction\s+[\w\$\s]+)|([\w\$\s\.]+)\(/g;
var debugCallMap = {};
var match;
while(match = debugCallRegExp.exec(value)){
if(!match[1]){
match = match[2].replace(/\s*\.\s*/g,'.').replace(/^[\s\S]*\s+([\$\w])/,'$1');
if(/^[\w\$]+(?:[\w\$\.]+)+$/.test(match) && keywords[match]!=true){
debugCallMap[match] = debugCallMap[match]? debugCallMap[match]+1: 1;
}
}
}
var featureRegExp = /\bif\s*\(\s*!*\s*['"]([\w\$\.\:]+)['"]\s*\)/g;
var featureMap = {};
while(match = featureRegExp.exec(value)){
featureMap[match[1]] = featureMap[match[1]]?featureMap[match[1]]+1 : 1;
}
updateList(ownerDocument.getElementById("debugCallList"),debugCallMap);
updateList(ownerDocument.getElementById("featureList"),featureMap);
updateList(ownerDocument.getElementById("internalList"),findGlobals(value))
}
function updateList(container,keyMap){
var checkedMap = getCheckedMap(container);
var keys = keyMap instanceof Array?keyMap:getKeys(keyMap);
if(container.id == "debugCallList"){
keys.sort(function(a,b){
var off = debugCalls.indexOf(b)-debugCalls.indexOf(a);
if(off){
return off;
}
return a>b?1:a==b?0:-1;
});
}
var buf = [];
for(var i=0;i<keys.length;i++){
var key = keys[i];
var id = container.id+"_" + key;
buf.push("<input type='checkbox' id='"+id+"' "+(checkedMap[key]?"checked":"")+"/>");
buf.push("<label for="+id+">"+key);
if(keyMap[key]){
buf.push("("+keyMap[key]+")");
}
buf.push("</label><br/>")
}
container.innerHTML = buf.join('\n');
}
function getCheckedMap(container){
var checkedMap = {};
var selected = container.getElementsByTagName("input");
var start = container.id.length+1;
var i= selected.length
while(i--){
checkedMap[selected[i].id.substr(start)] = selected[i].checked;
}
return checkedMap;
}
var debugCalls = ",$log.trace,$log.debug,alert,console.log,prompt,confirm,"
function getKeys(data,requiredValue){
var result = [];
for(var k in data){
if(requiredValue == undefined || requiredValue == data[k]){
result.push(k);
}
}
return result;
}
function bindAvaliable(form,group){
form[group.shift()].onclick=function(){
var disabled = !this.checked;
var i = group.length;
while(i--){
form[group[i]].disabled = disabled;
}
}
}
function sizeValidateListener(){
return checkField(this,/^\d+$/,'size must be a int value');
}
function ratioValidateListener(){
return checkField(this,/^\d+(\.\d+)?$/,'ratio must be a float value')
}
function checkField(input,pattern,msg){
if(pattern.test(input.value)){
return true;
}else{
alert(msg)
input.focus();
input.select();
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -