| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709 |
- // 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;i<heightArr.length;i++){
- if(!heightArr[i]){
- var c=0;//已使用百分比大小
- var n=0;//已设置百分比数量
- var nn=0//百分比个数
- for(var j=0;j<heightArr.length;j++){
- if(parallelArr[j])continue;
- nn++;
- if(heightArr[j]){
- n++
- c+=heightArr[j];
- }
- }
-
-
- if(nn>n){
- var residue_percentage=DEFAULT_PERCENTAGE-c;
- //可用百分比/剩余未设置百分比个数
- var perheight=residue_percentage/(nn-n);
- for(var j=0;j<heightArr.length;j++){
- if(!heightArr[j]){
- if(parallelArr[j]){
- heightArr[j]=100;
- continue;
- }
-
- unkonwPerHeighArr[j]=true;
- heightArr[j]=perheight;
- }
- }
- }
-
- break;
- }
- }
- // console.log("heightArr");
- // console.log(heightArr)
-
- //已使用的高度
-
- try{
-
-
- // if(!!minHighArr&&!!maxHighArr&&heightArr.length>=2){
- // var pro=10;
- // function maxindex(){
- // var a=null;
- // for(var i=0;i<maxHighArr.length;i++){
- // if(maxHighArr[i]-pro>=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;i<arr.length;i++){
- // a+=arr[i]
- // }
- // return a;
- // }
- // var cou=0;
- // while(count(maxHighArr)>usableHeight){
- // 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;i<resultheight.length;i++){
- if(unkonwPerHeighArr[i]){
- unknowCount+=resultheight[i].height;
- unknowNumberCount++;
- }
- co+=resultheight[i].height;
- }
- if(co<usableHeight){
- // console.log("666:"+unknowCount+"/"+co+"/"+usableHeight);
- var sss=usableHeight-co;//剩余可使用高度
- for(var i=0;i<resultheight.length&&sss>0;i++){
- if(unkonwPerHeighArr[i]){
- var h=resultheight[i].height;
- // console.log(resultheight[i]);
- if(h<resultheight[i].max&&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<resultheight.length;i++){
- if(resultheight[i].parallel){
- continue;
- }
- sum+=resultheight[i].height;
- }
- return sum;
- }
-
- function findadjustment(){
- for(var i=0;i<resultheight.length;i++){
- var height=resultheight[i].height;
- if(resultheight[i].parallel){
- continue;
- }
-
- //已经减到最小值的忽略
- if(resultheight[i].min>=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<resultheight.length;i++){
- var height=resultheight[i].height;
-
- if(resultheight[i].parallel){
- continue;
- }
-
- //已经减到最小值的忽略
- if(resultheight[i].min>=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<vv.length;i++){
- var vs=vv[i];
- if(!vs)continue;
- var vss=vs.split(":");
- if("true"==vs){
-
- }else if(vss.length==2){
- result[vss[0]]=vss[1];
- }
- }
- return result;
- }
|