common.js文件内容(项目公用js库)

/**
 * 项目公用js库
 * =====================
 * 版本号
 * 注意:有改动代码请同时更新版本号,以方便对比版本更新。
 */
var commonVersion="2.0.1_2014-12-01";


/**
 * 脚本永不出错,将错误信息输出控制台
 */
window.onerror=function(msg,url,l){
	if(window.console && window.console.error){
		var txt="There was an error on this page.\n\n";
		txt+="Error: " + msg + "\n";
		txt+="URL: " + url + "\n";
		txt+="Line: " + l + "\n\n";
		window.console.error(txt);
	}
	return true;
}

/**
 * 项目的虚拟根目录
 */
if(typeof basePath==="undefined"){
	basePath=getCookie("basePath");
	if(!basePath){
		(function(){
			var temp="js/common.js", url=$("script[src$='"+temp+"']").attr("src");
			basePath=url?url.replace(temp, "").replace(/\/+$/, ""):"";
		})();
	}
}

/**
 * 获取Cookie
 */
function getCookie(name){
	var arr=document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")), v;
	if(arr)
		v=unescape(arr[2]).replace(/(^['"]|['"]$)/g, "");
	return v;
}

/**
 * 设置全局ajaxt参数
 */
$.ajaxSetup({type:"POST", cache:false, traditional:true, global:true, timeout:90000});
/**
 * 设置全局ajax请求刚开始时执行的函数
 */
$(document).ajaxStart(function(){ nengLongOpenMask(); });
/**
 * 设置全局ajax请求停止后执行的函数
 */
$(document).ajaxStop(function(){ nengLongCloseMask(); });
/**
 * 设置全局ajax请求完成后执行的函数
 */
$(document).ajaxComplete(function(event, XMLHttpRequest, ajaxOptions){ nengLongCloseMask(); });
/**
 * 设置全局ajax请求成功后执行的函数
 */
$(document).ajaxSuccess(function(event, XMLHttpRequest, ajaxOptions){ nengLongCloseMask(); });
/**
 * 设置全局ajax请求错误执行的函数
 */
$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError){
	nengLongCloseMask();
	if(XMLHttpRequest.readyState==0){
		nengLongMessageTip({content:"连接失败!请检查网络或稍后再连接或联系管理员。", type:"error"});
	}else if(XMLHttpRequest.status==12029){
		nengLongMessageTip({content:"连接超时!请检查网络或稍后再连接或联系管理员。", type:"error"});
	}else if(XMLHttpRequest.readyState==3 || XMLHttpRequest.readyState==4){
		var getHeader=function(XMLHttpRequest, headerName){
				return XMLHttpRequest.getResponseHeader(headerName);
			},
			notForword=function(XMLHttpRequest, headerName){
			try{
				var obj=getHeader(XMLHttpRequest, headerName);
				if(obj && (obj==1)){
					var url=XMLHttpRequest.getResponseHeader("url"), temp=getCookie("isApp"), isApp=temp && temp=="true";
					if(isApp)
						window.location.href=url;
					else
						window.top.location.href=url;
					return true;
				}
			}catch(e){}
			return false;
		};
		if(notForword(XMLHttpRequest, "isNotLogin")){//没有登录
		}else if(notForword(XMLHttpRequest, "isNotPurview")){//没有权限
		}else if(getHeader(XMLHttpRequest, "javascript")){//没有权限
			$(this).append(XMLHttpRequest.responseText);
		}
	}
	nengLongStopPropagation(event);
});

/**
 * 删除
 * @param gridId grid控件的id名
 * @param idName 主键名
 * @param confirmOption 提示确认的参数
 * @param id 删除单条数据id参数
 */
function nengLongDelete(ajaxOption, gridId, idName, confirmOption, dataOption, id){
	var ids;
	// 删除单条数据
	if(id){
		ids=new Array();
		ids.push(id);
	}else{
		ids=nengLongGetSelectedIdsByGrid(gridId, idName);
		var size=ids.length;
		if(size===0){
			nengLongMessageTip({content:"请选择要删除的记录!", type:"warning"});
			return ;
		}
	}	
	
	var data={};
	data[idName+"s"]=ids;
	data=$.extend(data, dataOption);

	confirmOption=$.extend({
		onClose:function(value){
			if(value){
				nengLongAjax($.extend({
					data:data, success:function(r){
			    		var isOK=resultIsSuccess(r);
			    		nengLongMessageTip({content:r.message, type:(isOK?"success":"error")});//提示消息
						isOK && getObjectById(gridId).omGrid('reload');//刷新当前页
					}
				}, ajaxOption));
			}
		}
	}, confirmOption);
	
	nengLongConfirm(confirmOption);
}

/**
 * 打开加载中效果
 * @param msg 加载中显示的内容。默认为:加载中......
 * @param selector jquery选择器表达式。接受一个包含CSS选择器的字符串用于匹配的元素集合。详细请看jquery选择器
 */
function nengLongOpenMask(msg, selector){
	try{
		$(selector || "body").mask(msg || "加载中......"); 
	}catch(ex){}
}
 
/**
 * 关闭加载中效果
 * @param selector jquery选择器表达式。接受一个包含CSS选择器的字符串用于匹配的元素集合。详细请看jquery选择器
 * @author chendejiang
 * @日期 2012-3-8
 */
function nengLongCloseMask(selector){
	try{
		$(selector || "body").unmask();
	}catch(ex){}
}

/**
 * ajax表单提交
 * @param formId 表单对象。
 * @param {Object} ajaxSubmitOption 继承omAjaxSubmit参数,详细请看omAjaxSubmit参数
 * @author chendejiang
 * @日期 2012-3-8
 */
function nengLongAjaxSubmitForm(formId, ajaxSubmitOption){
	ajaxSubmitOption=$.extend({method:"POST", dataType:"json"}, ajaxSubmitOption);
	getObjectById(formId || "queryForm").omAjaxSubmit(ajaxSubmitOption);
}

/**
 * 表单提交
 * @param formId 表单ID。默认为editForm
 */
function nengLongSubmitForm(formId){
	getObjectById(formId || "editForm").submit(); 
}

/**
 * 重置表单
 * @param formId 表单ID。默认为editForm
 */
function nengLongResetForm(formId){
	getObjectById(formId || "editForm").resetForm(); 
}

/**
 * 重置表单后,并提交
 * @param formId 表单ID。默认为editForm
 */
function nengLongResetFormAndSubmit(formId){
	if (typeof formId==="undefined")
		formId="queryForm";
	nengLongResetForm(formId);
	nengLongSubmitForm(formId);
}

/**
 * 验证成功调用的方法
 * @param form 编辑页面的表单对象
 * @param isAjaxSubmit 是否为Ajax提交方式。默认为Ajax提交方式
 * @param queryForm 参数isUpdate如果为true:queryForm是列表grid控件Id;否则queryForm是查询条件的表单Id
 * @param dialogId 弹出窗口控件id
 * @param isUpdate 是否为修改, 默认为false。
 */
function submitHandlerCallbackfunction(form, isAjaxSubmit, queryForm, dialogId, isUpdate) {//验证成功后的方法
	if(isAjaxSubmit){
		//ajax提交表单
	    nengLongAjaxSubmitForm(form, {
	    	success:function(r, statusText, xhr, $form){
	    		nengLongCloseMask();
	    		var isOK=resultIsSuccess(r);
	    		nengLongMessageTip({content:r.message, type:(isOK?"success":"error")});//提示消息
	    		if(isOK){
	    			if (dialogId){
	    				var $obj=getObjectById(dialogId);
	    				if($obj.hasClass("om-dialog-content")){
	    					$obj.omDialog("close");//关掉弹出窗口
	    				}else if($obj.hasClass("om-tabs")){
	    					$obj.omTabs("close");//关闭当前页签
	    				}
	    			}
	    			if(isUpdate){
	    				getObjectById(queryForm).omGrid("reload");
	    			}else if (typeof queryForm!="undefined" && getObjectById(queryForm)){
	    				nengLongResetFormAndSubmit(queryForm);
	    			}
	    		}
	    	}
	    });
	    return false;
	}else{
		form.submit();//提交表单
	}
}

/**
 * 表单验证设置
 * @param {Object} options 继承jquery-validation参数,详细请看jquery-validation参数
 * @param formId 编辑页面的表单id。默认为editForm
 * @param isAjaxSubmit 是否为Ajax提交方式。默认为Ajax提交方式
 * @param queryForm 参数isUpdate如果为true:queryForm是列表grid控件Id;否则queryForm是查询条件的表单Id
 * @param dialogId 弹出窗口控件id
 * @param isUpdate 是否为修改, 默认为false。
 */
function nengLongValidateSetting(options, formId, isAjaxSubmit, queryForm, dialogId, isUpdate){
	if (typeof formId==="undefined")
		formId="editForm";
	if (typeof isAjaxSubmit==="undefined")
		isAjaxSubmit=true;
	if (typeof isUpdate==="undefined")
		isUpdate=false;
	
	if(options.rules){
		$.each(options.rules, function(i, n){
			if(n && n.remote && typeof n.remote==="object"){
				n.remote["global"]=false;
				n.remote["cache"]=false;
				n.remote["traditional"]=false;
				n.remote["type"]="POST";
			}
		});
	}
	
	options=$.extend({
		errorPlacement:function(error, element) {
			var p=element.parent();
			error.appendTo(p.hasClass("om-widget")?p.parent():p);
		},
		submitHandler:function(form){//验证成功后的方法
			submitHandlerCallbackfunction(form, isAjaxSubmit, queryForm, dialogId, isUpdate);
			return false;
		},
		success:function(label){label.empty().addClass("checked");}
	}, options);
	var objForm=getObjectById(formId);
	objForm.validate(options);
	objForm.valid();
	objForm.find("input:text:enabled,input:password:enabled").unbind("keydown.enter").bind("keydown.enter", function(event) {
		if (event.keyCode == '13'||event.keyCode == 13) {
			nengLongSubmitForm(objForm);
		}
	});
}

/**
 * 过滤特殊字符设置
 * @param {Object} names
 */
function nengLongFilterSetting(names){
	var objs=names.split(/[,; ]/);
	for(var i=0;i<objs.length;i++){
		nengLongInputFilter("#"+objs[i]);
	}
}

/**
 * 过滤特殊字符
 * @param {Object} selector
 */
function nengLongInputFilter(selector, form){
	var regx=/[\:\;\<\>\,\?\/\`\~\!\#\$\%\^\&\*\|\\\+\-\=]+/g;
	var $input=$(selector), $form=getObjectById(form) || $input.closest("form"), isForm=$form.length>0;
	$(selector).bind("keydown change blur", function(event) {
		var obj=$(this);
		setTimeout(function(){
			var v=obj.val();
			regx.test(v) && obj.val(v.replace(regx, ""));
		}, 0);
		
		if(isForm && event.type==="keydown" && event.keyCode == 13){
			nengLongSubmitForm($form);
		}
	});
}

/**
 * 过滤表单输入框的特殊字符
 * @param {Object} form
 */
function nengLongFormInputFilter(form){
	var objForm=getObjectById(form);
	nengLongInputFilter(objForm.find("input:text:enabled:not([readonly])"), objForm);
}

/**
 *  ajax执行显示加载中效果
 * @param options 继承jquery ajax参数,详细请看jquery ajax参数
 */
function nengLongAjax(options){
	try{
		$.ajax($.extend({dataType:"json"}, options));
	}catch(ex){}
}

/**
 * ajax执行显示加载中效果, 执行后并重新加载当前页面。
 * @param options 继承jquery ajax参数,详细请看jquery ajax参数
 */
function nengLongAjaxAndReload(options){
	nengLongAjax($.extend({success:successCallback}, options));
}

/**
 * 获取对象
 * @param selector
 * @returns
 */
function getObjectById(selector){
	var type=$.type(selector);
	if(type==="string"){
		return $(/^#.+/.test(selector)?selector:"#"+selector);
	}else if(type==="object" && !selector.jquery){
		return $(selector);
	}
	return selector;
}

/**
 * 返回结果是否成功
 * @param r
 * @returns
 */
function resultIsSuccess(r){
	return !!r && (r.status==="true" || r.status===true);
}

/**
 * ajax成功回调函数
 * @param r
 */
function successCallback(r){
	if(resultIsSuccess(r)){
		location.href=location.href;
	}else{
		nengLongMessageTip({content:r.message});
	} 
}

/**
 * 停止事件的传播
 * @param event
 */
function nengLongStopPropagation(event){
	if(event){//W3C取消冒泡事件
		event.stopPropagation && event.stopPropagation();
		event.stopImmediatePropagation && event.stopImmediatePropagation();
		event.preventDefault && event.preventDefault();
  	}else{
  		window.event.cancelBubble=true;//IE取消冒泡事件
  	}
}

/**
 * ajax执行结果加载指定元素, 并显示加载中效果
 * @param selector jquery选择器表达式。接受一个包含CSS选择器的字符串用于匹配的元素集合。详细请看jquery选择器
 * @param options 继承jquery ajax参数,详细请看jquery ajax参数
 * @param layoutSelector 布局选择器表达式。用于清除缓存
 */
function nengLongLoad(selector, options, layoutSelector){
	var myborderlayout=$(layoutSelector||"body > .om-borderlayout-proxy:last"), obj=$(selector);
	myborderlayout.nextUntil().remove();//清除缓存,防止弹出窗口有缓存重复数据导致多个表单提交并关闭不了窗口
	obj.children().length===0 && obj.html("<div style='height:100px;'></div>");
	options=$.extend({
		type:"POST", cache:false, traditional:true, global:false, timeout:90000, dataType:"html",
		beforeSend:function(){
			nengLongOpenMask(null, selector);
		},
		success:function(data){
			try{
				obj.html(data);
			}catch(ex){
				alert(ex.message);
			}
			myborderlayout.nextUntil().not(".om-calendar-list-wrapper").remove();//清除缓存,防止弹出窗口有缓存重复数据导致多个表单提交并关闭不了窗口;清除除了日期组件之外的所有缓存
		}
	}, options);
	try{
		$.ajax(options)
		.done(function(){
			nengLongCloseMask(selector);
		}).fail(function(){
			nengLongCloseMask(selector);
		});
	}catch(ex){}
}

/**
 * ajaxSubmit执行结果加载指定元素, 并显示加载中效果
 * @param selector jquery选择器表达式。接受一个包含CSS选择器的字符串用于匹配的元素集合。详细请看jquery选择器
 * @param formId 表单ID
 * @param options 继承omAjaxSubmit参数,详细请看omAjaxSubmit参数
 */
function nengLongLoadByForm(selector, formId, options){
	var obj=$(selector);
	obj.children().length===0 && obj.html("<div style='height:100px;'></div>");
	options=$.extend({
		type:"POST", cache:false, traditional:true, global:false, timeout:90000, dataType:"html",
		beforeSend:function(){
			nengLongOpenMask(null, selector);
		},
		success:function(responseText, statusText, xhr, $form){
			obj.html(responseText);
			nengLongCloseMask(selector);
    	},
    	error:function(){
    		nengLongCloseMask(selector);
    	}
	}, options);
    nengLongAjaxSubmitForm(formId, options);//ajax提交表单
}

/**
 * 打开弹出窗口
 * @param selector jquery选择器表达式。接受一个包含CSS选择器的字符串用于匹配的元素集合。详细请看jquery选择器
 * @param ajaxOptions 继承jquery ajax参数,详细请看jquery ajax参数
 * @param dialogOptions 继承omDialog参数, 详细请看omDialog参数
 */
function nengLongOpenDialog(selector, ajaxOptions, dialogOptions, isFileUpload){
	var myDialog=$(selector);
	dialogOptions=$.extend({autoOpen:true, modal:true, resizable:false, minHeight:50}, dialogOptions);
	var options={
		dataType:"html", success:function(data){
			try{
				myDialog.html(data);
				myDialog.omDialog(dialogOptions);
				if(isFileUpload && isFileUpload===true){
					checkFlash() && initFileUpload();
				}
			}catch(ex){
				myDialog.html("");
			}
		}
	};
	options=$.extend(options, (typeof ajaxOptions==="string")?{url:ajaxOptions}:ajaxOptions);
	$.ajax(options);
}

/**
 * 打开弹出窗口
 * @param selector jquery选择器表达式。接受一个包含CSS选择器的字符串用于匹配的元素集合。详细请看jquery选择器
 * @param url 地址
 * @param dialogOptions 继承omDialog参数, 详细请看omDialog参数
 */
function nengLongOpenDialogByIframe(selector, url, dialogOptions){
	var myDialog=$(selector);
	dialogOptions=$.extend({autoOpen:true, modal:true, resizable:true, minHeight:50}, dialogOptions);
	try{
		var myUrl="";
		if(typeof url==="string"){
			myUrl=url;
		}else if(typeof url==="object"){
			if(url.url)
				myUrl=url.url;
			if(url.data){
				myUrl+=(/\?/.test(myUrl)?"&":"?")+ $.param(url.data);
			}
		}
		myUrl+=(/\?/.test(myUrl)?"&":"?")+"t="+new Date().getTime();
		var obj=myDialog.find("iframe");
		if(obj.length>0){
			obj.attr("src", myUrl);
		}else{
			myDialog.html('<iframe src="'+myUrl+'" frameborder="0" style="width:100%; height:99%"></iframe>');
		}
		myDialog.omDialog(dialogOptions);
	}catch(ex){
		myDialog.html("");
	}
	
}

/**
 * 打开上传附件弹出窗口
 * @param selector jquery选择器表达式。接受一个包含CSS选择器的字符串用于匹配的元素集合。详细请看jquery选择器
 * @param ajaxOptions 继承jquery ajax参数,详细请看jquery ajax参数
 * @param dialogOptions 继承omDialog参数, 详细请看omDialog参数
 */
function nengLongOpenFileUploadDialog(selector, ajaxOptions, dialogOptions){
	nengLongOpenDialog(selector, ajaxOptions, dialogOptions, true);
}

/**
 * 确认提示框.
 * @param options
 */
function nengLongConfirm(options){
	var option={title:"确认删除", content:"确定删除选择的数据吗?"};
	if (typeof options==="object"){
		option=$.extend(option, options);
	}
	$.omMessageBox.confirm(option);
}

/**
 * 消息提示框
 * @param options
 */
function nengLongMessageTip(options){
	var option={title:"提示", timeout:4000, type:"alert"};
	if (typeof options==="object"){
		option=$.extend(option, options);
	}else if(typeof options==="string"){
		option.content=options;
	}
	try{
		window.top.$.omMessageTip.show(option);
	}catch(ex){
		try{
			$.omMessageTip.show(option);
		}catch(e){
			alert(option.content);
		}
	}
}

/**
 * 获取grid选择的id
 * @param gridId gridId
 * @param idName Id主键名称
 */
function nengLongGetSelectedIdsByGrid(gridId, idName){
	if(!idName){
		idName="id";
	}
	var arr=new Array();
	try{
		var objs=getObjectById(gridId).omGrid("getSelections", true), value;
		$.each(objs, function(i, n){
			value=n[idName];
			if(value){
				arr.push(value);
			}
		});
	}catch(ex){
	}
	return arr;
}

/**
 * 获取grid选择的属性,用“, ”分隔
 * @param gridId gridId
 * @param idName 属性名
 */
function nengLongGetSelectedByGrid(gridId, idName){
	return nengLongGetSelectedIdsByGrid(gridId, idName).join(",");
}

/**
 * 序列化表单
 * @param formId
 */
function nengLongGetSerialize(formId){
	var obj=getObjectById(formId), objs=obj.serializeArray(), queryData={};
	$.each(objs, function(i, n){
		var item=queryData[n.name];
		if(item){
			if(typeof item==="string"){
				queryData[n.name]=[item, n.value];
			}else
				queryData[n.name][item.length]=n.value;
		}else{
			queryData[n.name]=n.value;
		}
	});
	
	return queryData;
}

/**
 * 设置Grid的查询表单,并加载数据
 * @param gridId jquery选择器表达式
 * @param formId 表单ID
 */
function nengLongSetGridData(gridId, formId){
	getObjectById(gridId || "#grid").omGrid("loadData", formId || "queryForm");
}

/**
 * 初始化查询条件Panel
 * @param selector jquery选择器表达式
 * @param options 继承jquery ajax参数,详细请看jquery ajax参数
 */
function nengLongInitQueryPanel(selector, options){
	try{
		options=$.extend({ title:"搜索", iconCls:"icon_toolbar_search", collapsed:true, collapsible:true, closable:false}, options);
		getObjectById(selector).omPanel(options);
	}catch(ex){}
}

/**
 * 初始化日期
 * @param selector jquery选择器表达式
 * @param options 继承omCalendar参数,详细请看omCalendar参数
 */
function nengLongInitCalendar(selector, options){
	try{
		options=$.extend({readOnly:true}, options);
		getObjectById(selector).omCalendar(options);
	}catch(ex){}
}

/**
 * 初始化区间日期
 * @param startSelector  开始日期的jquery选择器表达式
 * @param endSelector    结束日期的jquery选择器表达式
 * @param startOptions   开始日期设置(可选)
 * @param endOptions     结束日期设置(可选)
 */
function nenglongInitBetweenCalendar(startSelector, endSelector, startOptions, endOptions){
	initStartCalendar(startSelector, endSelector, startOptions);
	initEndCalendar(endSelector, startSelector, endOptions);
}

/**
 * 初始华开始日期
 * @param startSelector 开始日期的jquery选择器表达式
 * @param endSelector   结束日期的jquery选择器表达式
 * @param startOptions  开始日期设置
 */
function initStartCalendar(startSelector, endSelector, startOptions){
	nengLongInitCalendar(startSelector, $.extend(startOptions, {
		onSelect:function(date, event) {
			setMinCalendarDate(endSelector, new Date(date.getTime() - 1*24*60*60*1000));//前一日
        }
	}));
}

/**
 * 初始化结束日期
 * @param endSelector   结束日期的jquery选择器表达式
 * @param startSelector 开始日期的jquery选择器表达式
 * @param endOptions    结束日期设置
 */
function initEndCalendar(endSelector, startSelector, endOptions){
	nengLongInitCalendar(endSelector, $.extend(endOptions, {
		onSelect:function(date, event) {
			setMaxCalendarDate(startSelector, date);
        }
	}));
}

/**
 * 设置最小日期
 * @param selector jquery选择器表达式
 * @param date 日期
 */
function setMinCalendarDate(selector, date){
	nengLongInitCalendar(selector, {minDate:date});
}

/**
 * 设置最大日期
 * @param selector jquery选择器表达式
 * @param date 日期
 */
function setMaxCalendarDate(selector, date){
	nengLongInitCalendar(selector, {maxDate:date});
}

/**
 * 初始化Grid
 * @param selector jquery选择器表达式
 * @param options 继承omGrid参数,详细请看omGrid参数
 */
function nengLongInitGrid(selector, options){
	try{
		options=$.extend({
			method:"POST", singleSelect:true, height:420, limit:10,
			onRefresh:function(nowPage, pageRecords, ev){
				var self=this, objs=this.find("tr.om-grid-row");
				$.each(objs, function(i, data){
					$(data).dblclick(function(event){
						$(self).omGrid('setSelections', [i]);
					})
					.find(".buttonUI").click(function(event){
						nengLongStopPropagation(event);
						$(self).omGrid('setSelections', [i]);
					});
				});
			},
			onError:function(xmlHttpRequest, textStatus, errorThrown, event){
				$(this).omGrid("reload");
			}
		}, options);
		
		getObjectById(selector).omGrid(options);
	}catch(ex){}
}

/**
 * 初始化页签
 * @param selector jquery选择器表达式
 * @param options 继承omTabs参数,详细请看omTabs参数
 */
function nengLongInitTabs(selector, options){
	var namespaces=selector.replace(/^\.*/, "."), objTab=getObjectById(selector),
		iframeAutoHeightByTab=function(){
			var obj=objTab.find(".om-tabs-panels"), $iframe=obj.find("iframe");
			if($iframe.length===0)
				return;
			var height=getTabHeight(selector);
			if(height < 200)
				height=200;
			
			$iframe.height(height); //这样给以一个最小高度 
		};
	try{
		options=$.extend({switchMode:"click", height:"fit", onAdd:function(){
			iframeAutoHeightByTab();
		}}, options);
		objTab.omTabs(options);
	}catch(ex){}
}

/**
 * 初始化页签
 * @param selector jquery选择器表达式
 * @param options 继承omTabs参数,详细请看omTabs参数
 */
function getTabHeight(selector){
	var obj=getObjectById(selector).find("> .om-tabs-panels"), $panelBody=obj.find("> .om-panel > .om-panel-body"), paddind=$panelBody.outerHeight(true)-$panelBody.height();
	return obj.height()-paddind;
}

/**
 * 添加页签
 * @param selector jquery选择器表达式
 * @param config -{
 * 	index:新增页签的位置(从0开始计数, 默认在末尾增加页签),可设置为'last',
 * 	title:新增页签的标题,默认值为 'New Title' + 全局唯一字符串,
 * 	content:新增页签的内容,默认值为 'New Content' + 全局唯一字符串,
 * 	url:新增页签的数据源为url。如果同时设置了content和url,则优先使用url,
 * 	tabId:设置tabId,作为唯一标识,可以通过此标识唯一确定一个tab页签,tabId不能重复,
 * 	closable:该新增的页签是否可关闭,
 * 	activateNew:是否同时打开新添加的页签,默认为true
 * }
 * @param isIframe 是否为iframe的页签。默认为false
 * @例子
 * <pre>
 * 设置相同标识唯一始终在一个页签显示
 * nengLongAddTab("#make-tab", {
 * 	title:"新页签标题",
 * 	url:"test/open!edit.do",
 * 	tabId:"tab-edit" //设置tabId,作为唯一标识,可以通过此标识唯一确定一个tab页签,tabId不能重复
 * });
 * 如果页签通过iframe加载
 * nengLongAddTab("#make-tab", {
 * 	title:"新页签标题",
 * 	url:"test/open!edit.do",
 * 	tabId:"tab-edit" //设置tabId,作为唯一标识,可以通过此标识唯一确定一个tab页签,tabId不能重复
 * }, true);
 * 
 * 如果始终都是打开新的页签就去掉tabId属性
 * </pre>
 */
function nengLongAddTab(selector, config, isIframe){
	if (typeof isIframe==="undefined"){
		isIframe=false;
	}
	config=$.extend({closable:true}, config);//默认显示关闭页签
	var obj=getObjectById(selector),
		_add=function(){//新增页签
			if(isIframe){
				config.content='<iframe src="'+config.url+'" scrolling="auto" frameborder="0" style="width:100%;"></iframe>';
				config.url=null;
			}
			obj.omTabs('add', config);
		};
	if(config.tabId){
		var index=obj.omTabs("getAlter", config.tabId);
		if(index===null){
			_add();
		}else{//已经打开过页签,重新更新页签标题和内容
			obj.find(".om-tabs-headers").find(".om-tabs-inner[tabId="+config.tabId+"]").html(config.title);//设置标题
			if(isIframe){
				obj.find(".om-tabs-panels > .om-panel > .om-panel-body:eq("+index+") > iframe").attr("src", config.url);
			}else{
				obj.omTabs('reload', index , config.url, config.content);
			}
			obj.omTabs('activate', index);
		}
	}else{
		_add();
	}
}

/**
 * 只读编辑器
 * @param selector jquery选择器表达式
 */
function nengLongReadOnlyEditor(selector){
	nengLongInitEditor(selector, { filebrowserImageUploadUrl:null, allowImageType:[], onKeyUp:function(){}, toolbar:[], readOnly:true, resizable:false});
}
/**
 * 初始化编辑器
 * @param selector jquery选择器表达式
 * @param options 继承omEditor参数,详细请看omEditor参数
 * @param isAutoHeight 是否是高度自动设置.
 */
function nengLongInitEditor(selector, options, isAutoHeight){
	if (typeof isAutoHeight==="undefined"){
		isAutoHeight=true;
	}
	try{
		//获取虚拟根目录
		options=$.extend({
			filebrowserImageUploadUrl:basePath+"/editor/image/upload.do",
			allowImageType:["jpeg", "jpg", "png", "bmp"],
			onKeyUp:function(event) {
				getObjectById(selector).omEditor("updateElement");
			},
			toolbar:[
	            {name:"document", items:["Source", "-", "Save", "DocProps", "Preview", "Print"]},
	            {name:"clipboard", items:["Cut", "Copy", "Paste", "PasteText", "PasteFromWord", "-", "Undo", "Redo"]},
	            {name:"editing", items:["Find", "Replace" ]},
	            {name:"basicstyles", items:["Bold", "Italic", "Underline", "Strike", "Subscript", "Superscript", "-", "RemoveFormat" ]},
	            {name:"paragraph", items:["NumberedList", "BulletedList", "-", "Outdent", "Indent", "-", "Blockquote", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock", "-", "BidiLtr", "BidiRtl" ]},
	            {name:"links", items:["Link", "Unlink", "Anchor" ]},
	            {name:"insert", items:["Image", "Table", "HorizontalRule", "SpecialChar", "PageBreak"]},
	            {name:"styles", items:["Styles", "Format", "Font", "FontSize" ]},
	            {name:"colors", items:["TextColor", "BGColor" ]},
	            {name:"tools", items:["Maximize"]}
			]
		}, options);
		OMEDITOR.stylesSet.registered["default"].unshift({name:"标准样式", element:"span", styles:{"font-size":"24px", "line-height":"1.5em"}});
		var myElement=getObjectById(selector).omEditor(options), imageElement=$("<input />").hide().insertBefore(myElement), selectorId=myElement.attr("id")||myElement.attr("name"), myEdite=OMEDITOR.instances[selectorId];
		if(myEdite){
			var txtUrl;
			//及时更新到textarea
			myEdite.on("contentDirChanged", function(event){ event.editor.updateElement(); });
			//增加自己扩展的浏览图片插件
//			myEdite.on("dialogShow", function(event){
//				$(event.data.parts.dialog.$).css("z-index", "910").parent().prev(".cke_dialog_background_cover").css("z-index", "900");
//				if("image"===event.data._.name){
//					txtUrl=event.data._.contents.info.txtUrl;
//					$("#"+event.data._.contents.info.browse.domId).css("display","inline-block")
//					.unbind().bind("click",function(){
//						imageElement.selectDialog("show");
//					});
//				}
//			});
			myEdite.on("dialogHide", function(event){
				if("image"===event.data._.name){
					txtUrl=null;
				}
			});
			myEdite.on("destroy", function(event){
				imageElement.remove();
			});
			
			myEdite.on("instanceReady", function(event){
				if(isAutoHeight){
					var namespaces=selector.replace(/^\.*/,"."), objs=myElement.nextUntil(".cke_contents").find("iframe");
					if(objs.length>0){
						var _setEditorHeight=function(){
							var sumHeight=0, _height, items=$("body").children(":visible");
							$.each(items, function(){
								var $obj=$(this);
								if($obj.css("visibility")!=="hidden")
									sumHeight+=$obj.outerHeight(true);
							});
							sumHeight=sumHeight-objs.parent().height();
							_height=$(window).height()-sumHeight-4;
							if(_height<200)
								_height=200;
							objs.parent().height(_height);
						};
						_setEditorHeight();
						$(window).unbind("resize"+namespaces).bind("resize"+namespaces, function(){
							_setEditorHeight();
						});
					}
				}
				initEditorImageBrowseDialog(imageElement, {visible:false, onSelect:function(data, event){
					txtUrl.setValue(data[0]);
				}});
			});
			
		}
	}catch(ex){}
}

/**
 * 绑定查询文本框的“Enter”事件,
 * 文本框加入样式“searchValue”,
 * 查询按钮加入样式“searchButton”
 * @return
 */
function nengLongBindSearch(){        
	var inputObj=$(".searchValue");
	inputObj.bind("keydown", function(event){
		event.keyCode===13 && inputObj.next(".searchButton").first().click();
    });
}

/**
 * 检测是否安装Flash
 */
function checkFlash(){
	var myCheckFlash=function(){try{var isIE=(navigator.appVersion.indexOf("MSIE")>=0);var hasFlash=true;if(isIE){try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(e){hasFlash=false}}else{if(!navigator.plugins["Shockwave Flash"]){hasFlash=false}}return hasFlash}catch(ex){alert(ex.message)}};if(myCheckFlash()){return true}else{window.alert("没有安装flash插件!请安装flash插件才能使用");window.location.href="http://get.adobe.com/cn/flashplayer/"}
}
/**
 * 将ISO8601日期格式字符串转换成日期对象
 * @param s
 * @param ignoreTimezone
 * @returns
 */
function parseISO8601(s, ignoreTimezone) {
	var m=s.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);if(!m){return null}var fixDate=function(d,check){if(+d){while(d.getDate()!=check.getDate()){d.setTime(+d+(d<check?1:-1)*HOUR_MS)}}};var date=new Date(m[1],0,1);if(ignoreTimezone||!m[13]){var check=new Date(m[1],0,1,9,0);if(m[3]){date.setMonth(m[3]-1);check.setMonth(m[3]-1)}if(m[5]){date.setDate(m[5]);check.setDate(m[5])}fixDate(date,check);if(m[7]){date.setHours(m[7])}if(m[8]){date.setMinutes(m[8])}if(m[10]){date.setSeconds(m[10])}if(m[12]){date.setMilliseconds(Number("0."+m[12])*1000)}fixDate(date,check)}else{date.setUTCFullYear(m[1],m[3]?m[3]-1:0,m[5]||1);date.setUTCHours(m[7]||0,m[8]||0,m[10]||0,m[12]?Number("0."+m[12])*1000:0);if(m[14]){var offset=Number(m[16])*60+(m[18]?Number(m[18]):0);offset*=m[15]==="-"?1:-1;date=new Date(+date+(offset*60*1000))}}return date
}

/**
 * 更新toolbarUI right 布局
 */
function updateToolbarUIrightCss(){
	!($(".toolbarUI > .left > a").is("a")) && $(".toolbarUI > .right").css("margin-left", 0);
}

/**
 * 根据父元素的高度自动设置指定元素的高度
 * @param selector
 */
function autoHeightByParent(selector){
	var infoIframe=getObjectById(selector), namespaces=selector.replace(/^\.*/,"."),
		_setHeight=function(height){
			infoIframe.height(height < 200 ? 200:height); //这样给以一个最小高度 
		};
	_setHeight(infoIframe.parent().height());
	if($.type(selector)==="string"){
		namespaces = selector;
	}else{
		var $offset = infoIframe.offset();
		namespaces ="." + (infoIframe.attr("id")||($offset.left+"-"+$offset.top));
	}
	$(window).unbind("resize"+namespaces).bind("resize"+namespaces, function(){
		_setHeight(infoIframe.parent().height());
	});
}

/**
 * 设置根据对象指定属性的值
 * @author chendejiang
 * @param obj object对象
 * @param name string 属性名。(可以带.多层设置值)
 * @param value 值
 * @例子
 * var obj={name:"abc"};
 * setProperty(obj, "type.code", "test");//obj={name:"abc",type:{code:"test"}}
 * setProperty(obj, "type", "类型");//obj={name:"abc",type:"类型"}
 */
function setProperty(obj, name, value){
	var properties=name.split("."), size=properties.length-1, i=-1, nextObj;
	do{
		nextObj=obj[properties[++i]];
		if(i===size){
			obj[properties[i]]=value;
			break;
		}
		if(!nextObj){
			obj[properties[i]]={};
		}
		obj=obj[properties[i]];
	}while(i<=size);
}

/**
 * 获取根据对象指定属性的值
 * @author chendejiang
 * @param obj object对象
 * @param name string 属性名。(可以带.多层设置值)
 * @param value 值
 * @例子
 * var obj={name:"abc", type:{code:"test"}};
 * getProperty(obj, "type.name");//undefined
 * getProperty(obj, "type.code");//test
 * getProperty(obj, "name");//abc
 */
function getProperty(obj, name){
	var v, properties=name.split("."), j=1, length=properties.length, v=obj[properties[0]];
	while(j<length && v && (v=v[properties[j++]])!==undefined){}
	return v;
}

/**
 * 异步调用方法
 * @param callFn 调用的方法
 * @param done 成功后调用的方法
 * @param fail 失败后调用的方法
 * @param loadingMessage 加载中的提示消息
 */
function asynCallFn(callFn, done, fail, loadingMessage){
	nengLongOpenMask(loadingMessage);
	setTimeout(function(){
		try{
			callFn();
		}catch(e){
			fail && fail();
		} finally{
			nengLongCloseMask();
		}
		done && done();
		
	}, 1);
}

/**
 * 页面打印
 * @param selector 打印范围选择
 * @param isPop 是否打开新的一页显示打印预览
 * @param popClose 取消打印,打印预览自动关闭
 * 
 * example:
 * 打开新一个页显示打印预览,在取消打印自动关闭预览
 * nenglongPrintArea("#test", true)
 */
function nenglongPrintArea(selector, isPop, popClose){
	var option = {};
	var mode = "popup";
	var headElements = "<meta charset=\"utf-8\" />,<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"/>";
	if(!isPop){
		mode = "iframe";
	}
	if(typeof popClose == 'undefined' || popClose == null){
		popClose = true;
	}
	option = {mode:mode, popClose:popClose, extraHead:headElements};
	$(selector).printArea(option);
}



你可能感兴趣的:(common.js文件内容(项目公用js库))