⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compressor-connector.js

📁 JS编译工具
💻 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 + -