/** * 项目公用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); }