// var reduceHeight = window.innerHeight -document.body.offsetHeight // var iframes = document.querySelectorAll('iframe[wdFitHeight=true]') // var averageReduceHeight = reduceHeight / iframes.length; // document.body.style.overflow="hidden"; // for(var i = 0 ; i < iframes.length ; i ++){ // iframes[i].height = iframes[i].offsetHeight+averageReduceHeight; // } // var topBodyHeight = window.top.document.body.offsetHeight; // var dialogHeight = window.top.document.querySelector('.dhtmlx_window_active').offsetHeight; // var dialogClientHeight = window.top.document.querySelector('.dhtmlx_wins_body_inner').offsetHeight; // var maxDialogClientHeight = topBodyHeight-(dialogHeight-dialogClientHeight); //计算body可能最大和最小高度 // var otherDomHeight = document.body.offsetHeight; // if( document.body.dataset.bjgd ) { // otherDomHeight = parseInt(document.body.dataset.bjgd) // } // var wdFitHeightEles = document.querySelectorAll('[wdFitHeight]'); // var wdFitEleMinHighArr = [];//存放iframe的minHigh // var wdFitEleMaxHighArr = [];//存放iframe的maxHigh // var minHigh = otherDomHeight; // var maxHigh = otherDomHeight; // for(var i = 0; i < wdFitHeightEles.length; i ++){//减去所有的wdFitHeightEles元素 // if(document.body.dataset.bjgd == null){ // otherDomHeight -= wdFitHeightEles[i].offsetHeight; // minHigh -= wdFitHeightEles[i].offsetHeight; // maxHigh -= wdFitHeightEles[i].offsetHeight; // } // var value = wdFitHeightEles[i].getAttribute('wdFitHeight'); // var array = /min\s*?:\s*?(\d+)/.exec(value) // if(!!array){ // wdFitEleMinHighArr[i] = parseInt(array[1]); // minHigh += wdFitEleMinHighArr[i]; // } // array = /max\s*?:\s*?(\d+)/.exec(value) // if(!!array){ // wdFitEleMaxHighArr[i] = parseInt(array[1]); // maxHigh += wdFitEleMaxHighArr[i]; // } // } // console.log("minHigh:"+minHigh+",maxHigh:"+maxHigh); // if(window.parent && window.parent.document.querySelector('.dhtmlx_window_active') != null) { // var tbh = window.top.innerHeight;//浏览器视口大小; // if ( minHigh + 10 > tbh ) { // // // setDialogBound({ // top:'0px', // height:minHigh+10+'px' // }) // hideDialogBorder(); // } else if (maxHigh + 10 < tbh) { // setDialogBound({ // top:(window.top.innerHeight - maxHigh - 50)/2+'px', // height:maxHigh+50+'px' // }) // } else { // hideDialogBorder(); // setDialogBound({ // top:'0px', // height:window.top.innerHeight+'px', // }) // } // initWdFitHeight(); // }else{ // initWdFitHeight(); // } function findParent(ele,topNum){ var cur = ele; do { cur = cur.parentElement; if(cur == null){ var iframes = document.querySelectorAll('[ssFith],[ssDragh]'); // ('[wdFitHeight],[wdDragHeight]')。Lin for(var i = 0 ; i < iframes.length; i ++) { var v=getFitHeightValue(iframes[i]); if(/(rowHeight)/ig.test(v)){continue;} var array = /top\s*?:\s*?(\d+)/ig.exec(v) if ( array != null && array[1] == topNum) {//无top参数并且topNum为1时 return iframes[i]; } } return null; } if(new RegExp('top\s*?:\s*?'+topNum,'ig').test(getFitHeightValue(cur))){ return cur; } }while(true); return null; } function getFitHeightValue(element){ var wdfitheight=element.getAttribute('ssFith'); // ('wdFitHeight')。Lin var wdDragheight=element.getAttribute('ssDragh'); // ('wdDragHeight')。Lin // console.log("wdfitheight:"+wdfitheight+"wdDragheight:"+wdDragheight) var val=wdDragheight||wdfitheight if("true"==val) val="top:1"; return val // if(wdDragheight){ // return wdDragheight; // }else if(wdfitheight){ // return wdfitheight; // }else{ // return null; // } } /** * [initWdFitHeight 自适应wdFitHeight元素高度,] * @param {[number]} bqgd [除标记wdFitHeight元素之外的其他dom元素的高度之和] * @return {[type]} [description] */ function initWdFitHeight(bqgd,topNum){ if(!bqgd)bqgd=0; /* 再改,部件里的 var wdFitHeightbqgd= 改为 ssLblHeightByFith=。Lin if(window.wdFitHeightbqgd)bqgd+=window.wdFitHeightbqgd; */if (window.ssLblHeightByFith) bqgd += window.ssLblHeightByFith; var reduceHeight = window.innerHeight -document.body.offsetHeight //窗口可用区域(空白区域)。 var iframes = document.querySelectorAll('[ssFith],[ssDragh]'); // ('[wdFitHeight],[wdDragHeight]')。Lin // console.log(iframes); //抽取top数值与topNum相同iframes。 if( topNum != null ) { var temp = []; for(var i = 0 ; i < iframes.length; i ++) { var v=getFitHeightValue(iframes[i]); if(/(rowHeight)/ig.test(v)){continue;} var array = /top\s*?:\s*?(\d+)/ig.exec(v) if ( array != null && array[1] == topNum) {//无top参数并且topNum为1时 temp.push(iframes[i]); } } iframes = temp }else{//topNum为null默认为第一层 var temp = []; for(var i = 0 ; i < iframes.length; i ++) { var v=getFitHeightValue(iframes[i]); if(/(rowHeight)/ig.test(v)){continue;} // console.log(v+" "+ /(rowHeight)/ig.test(v)) if ( !/top\s*?:\s*?(\d+)/ig.test(v)) {//无top参数并且topNum为1时 temp.push(iframes[i]); } else if(/top\s*?:\s*?1/ig.test(v)) { temp.push(iframes[i]); } } iframes = temp; } //如果iframes的长度大于0执行自适应 if(iframes.length > 0) { var usableHeight = 0; if ( topNum == null || topNum < 2 ) {//第一层的处理,iframes可以适应的高度计算 usableHeight = reduceHeight; for( var i = 0; i < iframes.length; i++ ){ // console.log(iframes[i].offsetHeight) usableHeight += iframes[i].offsetHeight; } //如果有bjgd数据,优先使用bjgd if( bqgd != null ) { usableHeight = window.innerHeight - bqgd; } }else{ var p = findParent(iframes[0],topNum-1);//查找上一级的自适应元素,用于获取高 var parentHeight=p.offsetHeight; // if(p.getAttribute("wdfitvalue")){ // parentHeight=p.getAttribute("wdfitvalue"); // } var pWdFitHeight = getFitHeightValue(p) var array = /fixHeight\s*?:\s*?(\d+)/ig.exec(pWdFitHeight); if ( array != null ) { usableHeight = parentHeight- parseInt(array[1]); }else{ usableHeight = parentHeight; } } //禁止滚动条 // document.body.style.overflow="auto"; var heightArr = [];//存放计算后得到的height百分 var minHighArr = [];//存放iframe的minHigh var maxHighArr = [];//存放iframe的maxHigh var parallelArr = [];//平行属性 var unkonwPerHeighArr=[];//未设置百分比 // parallel:true for(var i = 0 ; i < iframes.length ; i ++){ var wdFitHeight =getFitHeightValue(iframes[i]) var array = /(\d+)%/.exec(wdFitHeight); if(!!array) { heightArr[i] = parseInt(array[1]); }else{ heightArr[i] = null; } array = /min\s*?:\s*?(\d+)/.exec(wdFitHeight) if(!!array){ minHighArr[i] = parseInt(array[1]); } array = /max\s*?:\s*?(\d+)/.exec(wdFitHeight) if(!!array){ maxHighArr[i] = parseInt(array[1]); } array = /parallel:true/.exec(wdFitHeight) if(!!array){ parallelArr[i]=true; // maxHighArr[i] = parseInt(array[1]); } } //默认总百分 var DEFAULT_PERCENTAGE=100; //重新分配百分比高度 for(var i=0;in){ var residue_percentage=DEFAULT_PERCENTAGE-c; //可用百分比/剩余未设置百分比个数 var perheight=residue_percentage/(nn-n); for(var j=0;j=2){ // var pro=10; // function maxindex(){ // var a=null; // for(var i=0;i=minHighArr[i]){ // if(a==null){a=i} // if(maxHighArr[i]>=maxHighArr[a]){ // a=i; // } // } // } // return a; // } // // function count(arr){ // var a=0; // for(var i=0;iusableHeight){ // cou++; // var index=maxindex(); // if(index==null)break // // var max= maxHighArr[index]; // // maxHighArr[index]=max-pro; // // if(cou>100){ // break; // } // } // } }catch(e){ console.log(e); } // heightArr // maxHighArr // minHighArr var resultheight=[]; for(var i = 0 ; i < iframes.length ; i ++){ var perc=heightArr[i]; var max=maxHighArr[i]; var min=minHighArr[i]; if(!min){ min=0; } var height=(usableHeight) * perc / DEFAULT_PERCENTAGE; var perHeight=height; var parallel=false; if(parallelArr[i]){ parallel=true; height=usableHeight; } if(max&&height>=max){ height=max } if(min>=height){ height=min } resultheight[i]={ max:max, min:min, perc:perc, height:height, parallel:parallel } } var unknowCount=0; var unknowNumberCount=0; var co=0;//总使用高度 for(var i=0;i0;i++){ if(unkonwPerHeighArr[i]){ var h=resultheight[i].height; // console.log(resultheight[i]); if(h=resultheight[i].min){ var u=resultheight[i].max-h; if(sss>0&&sss-u>0){ resultheight[i].height+=u; sss-=u; }else if(sss>0&&sss-u<0){ resultheight[i].height+=sss; sss=0; } } } } } // console.log(resultheight); function sumheight(){ var sum=0; for(var i=0;i=height){ continue; } //过大 当前百分比 var curpercent=parseInt((resultheight[i].height/usableHeight)*100); if(curpercent>resultheight[i].perc){ return i; } if(!resultheight[i].max){ //优先缩小没有设置最大值的数 return i; }else{ continue; } } //第二次循环返回可以调整的选项 for(var i=0;i=height){ continue; } return i; } return null; } try{ // console.log("resultheight") // console.log(resultheight) var limit=0;//循环限制器 var adjust=10; while(sumheight()>usableHeight){ limit++; var index=findadjustment(); if(index==null)break; if(!resultheight[index].parallel){ resultheight[index].height=resultheight[index].height-adjust; } if(limit>=200){ break; } } // console.log(resultheight) for(var i = 0 ; i < iframes.length ; i ++){ var height=resultheight[i].height; // console.log(resultheight[i]); iframes[i].setAttribute("wdfitvalue",height+"/"+usableHeight); iframes[i].height = height; iframes[i].style.height = height+"px"; try{ var name=iframes[i].getAttribute("name"); if(window.UE&&name){ setTimeout(function(){ if(UE.instants[name]){ window.UE.getEditor(name).container.style.height = height+"px"; } },500) } }catch(e){ console.log(e); } } }catch(e){ console.log(e); } // var useHeight=0; // for(var i = 0 ; i < iframes.length ; i ++){ // var height; // height = (usableHeight) * heightArr[i] / 100; // // var maxheight=null; // var minheight=null; // // if( !!maxHighArr[i]){ // maxheight=maxHighArr[i]; // } // if(!!minHighArr[i]){ // minheight=minHighArr[i]; // } // // // // //使用最大值 // if ( maxheight && maxheight < height ) { // height = maxheight; // //使用最小值 // } else if( minheight&&minheight> height ) { // height = minheight; // }else if(iframes.length==1){ // // }else if(maxheight && minheight){ // height = minheight; // } // // // // // if(iframes[i].name && iframes[i].name.indexOf('Edit') != -1) { // height -= 107; // } // // // // useHeight+=height; // // iframes[i].setAttribute("wdfitvalue",height); // iframes[i].height = height; // iframes[i].style.height = height+"px"; // } //计算内层wdFitHeight元素 if( topNum == null ) { initWdFitHeight(bqgd, 2) }else{ initWdFitHeight(bqgd,topNum+1); } } else { //列表自适应 // var eles = document.querySelectorAll('[wdFitHeight]') // for( var i = 0 ; i < eles.length; i ++ ){ // var ele = eles[i]; // var val = ele.getAttribute('wdFitHeight'); // if ( /pagination\s*?:\s*?true/.exec(val) != null ) { // var temp = /rowHeight\s*?:\s*?(\d+)/.exec(val); // if ( temp != null ) { // var hasFit = ele.querySelector('[name=hasFit]');//仅在首次加载页面时,即未自适应过之前才会触发 // if ( hasFit != null && (hasFit.value.length == 0 || hasFit.value == 'false' )){ // var rowHeight = temp[1]; // var usableHeight = ele.offsetHeight; // var array = /fixHeight\s*?:\s*?(\d+)/ig.exec(val); // if ( array != null ) { // usableHeight -= parseInt(array[1]); // } // var rowCountPerPage = parseInt(usableHeight / rowHeight); // var rcpp = ele.querySelector('[name=rowCountPerPage]'); // if ( rcpp == null ) { // rcpp = document.createElement('input'); // rcpp.setAttribute('type','hidden'); // rcpp.setAttribute('name','rowCountPerPage'); // ele.appendChild(rcpp); // } // rcpp.value = rowCountPerPage; // hasFit.value = true; // ele.submit(); // return; // } // } // } // } } } /** * 去除dialog边框 */ function hideDialogBorder(){ //隐藏标题栏 var title = window.top.document.querySelector('.dhtmlx_wins_title'); title.style.display = 'none'; var btns = window.top.document.querySelector('.dhtmlx_wins_btns'); btns.style.display = 'none'; //撑满窗口 var innerBody = window.top.document.querySelector('.dhtmlx_wins_body_inner') innerBody.style.top = "0px"; innerBody.style.bottom = "0px"; innerBody.style.left = "0px"; innerBody.style.right = "0px"; innerBody.style.position = 'absolute'; innerBody.style.height = null; innerBody.style.width = null; innerBody.style.margin = '5px'; var mainCont = window.top.document.querySelector('div[ida=dhxMainCont]') mainCont.style.height = null; mainCont.style.width = null; mainCont.style.bottom = '0px'; mainCont.style.right = '0px'; } /** * 设置dialog的位置及大小 * @param {{top:String,left:String,right:String,bottom:String,height:String,width:String}} obj */ function setDialogBound(obj){ var dialog = window.top.document.querySelector('.dhtmlx_window_active'); var inner = window.top.document.querySelector('.dhtmlx_wins_body_outer'); dialog.style['transition'] = 'all 0.5s'; dialog.style['-moz-transition'] = 'all 0.5s'; dialog.style['-webkit-transition'] = 'all 0.5s'; dialog.style['-o-transition'] = 'all 0.5s'; if(obj.top){ dialog.style.top = obj.top; } if(obj.left){ dialog.style.left = obj.left; } if(obj.right){ dialog.style.right = obj.right; } if(obj.bottom){ dialog.style.bottom = obj.bottom; } if(obj.height){ dialog.style.height = obj.height; var ret = /\d+/.exec(obj.height); if(ret){ inner.style.height = (parseInt(ret[0])-2)+"px"; } } if(obj.width){ dialog.style.width = obj.width; var ret = /\d+/.exec(obj.width); if ( ret ) { inner.style.width = (parseInt(ret[0])-1)+'px'; } } var innerBody = window.top.document.querySelector('.dhtmlx_wins_body_inner') // innerBody.style.top = "0px"; innerBody.style.bottom = "5px"; innerBody.style.left = "5px"; innerBody.style.right = "5px"; innerBody.style.position = 'absolute'; innerBody.style.height = null; innerBody.style.width = null; // innerBody.style.margin = '5px'; var mainCont = window.top.document.querySelector('div[ida=dhxMainCont]') mainCont.style.height = null; mainCont.style.width = null; mainCont.style.bottom = '0px'; mainCont.style.right = '0px'; } function parseFitHeightValue(v){ var result={} if(!v)return result; var vv=v.split(/[;,]/); for(var i=0;i