From 96ea4b4eec841ccb85d4725c9cc950181dd3fc97 Mon Sep 17 00:00:00 2001 From: leon Date: Tue, 7 Nov 2023 16:05:14 +0800 Subject: [PATCH] set dynamic max height for bootstrap combo box --- Roo/bootstrap/form/ComboBox.js | 2 ++ roojs-bootstrap-debug.js | 2 ++ roojs-bootstrap.js | 19 ++++++++++--------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Roo/bootstrap/form/ComboBox.js b/Roo/bootstrap/form/ComboBox.js index 97a62cbbd2..7b603b031f 100644 --- a/Roo/bootstrap/form/ComboBox.js +++ b/Roo/bootstrap/form/ComboBox.js @@ -1828,6 +1828,8 @@ Roo.extend(Roo.bootstrap.form.ComboBox, Roo.bootstrap.form.TriggerField, { if (!this.editable) { Roo.get(document).on('keydown', this.listKeyPress, this); } + + this.list.setStyle('maxHeight', 'calc(100% - ' + this.list.getTop() + 'px - 50px)'); this.fireEvent('expand', this); }, diff --git a/roojs-bootstrap-debug.js b/roojs-bootstrap-debug.js index 117b541265..c0cb554e90 100644 --- a/roojs-bootstrap-debug.js +++ b/roojs-bootstrap-debug.js @@ -18708,6 +18708,8 @@ Roo.extend(Roo.bootstrap.form.ComboBox, Roo.bootstrap.form.TriggerField, { if (!this.editable) { Roo.get(document).on('keydown', this.listKeyPress, this); } + + this.list.setStyle('maxHeight', 'calc(100% - ' + this.list.getTop() + 'px - 50px)'); this.fireEvent('expand', this); }, diff --git a/roojs-bootstrap.js b/roojs-bootstrap.js index 1f6c5fd9a0..47d2a9ba4c 100644 --- a/roojs-bootstrap.js +++ b/roojs-bootstrap.js @@ -778,15 +778,16 @@ var B={params:this.getParams(q)};if(this.loadNext){B.add=true;B.params.start=thi }}Roo.get(document).un('mousedown',this.collapseIf,this);Roo.get(document).un('mousewheel',this.collapseIf,this);if(!this.editable){Roo.get(document).un('keydown',this.listKeyPress,this);}this.fireEvent('collapse',this);this.validate();},collapseIf:function(e){var A=e.within(this.el); var B=e.within(this.list);var C=(Roo.get(e.getTarget()).id==this.list.id)?true:false;if(A||B||C){return;}if(this.tickable){this.onTickableFooterButtonClick(e,false,false);}this.collapse();},expand:function(){if(this.isExpanded()||!this.hasFocus){return;}var lw=this.listWidth||Math.max(this.inputEl().getWidth(),this.minListWidth); this.list.setWidth(lw);Roo.log('expand');this.list.show();this.restrictHeight();if(this.tickable){this.tickItems=Roo.apply([],this.item);this.okBtn.show();this.cancelBtn.show();this.trigger.hide();if(this.editable){this.tickableInputEl().focus();}}Roo.get(document).on('mousedown',this.collapseIf,this); -Roo.get(document).on('mousewheel',this.collapseIf,this);if(!this.editable){Roo.get(document).on('keydown',this.listKeyPress,this);}this.fireEvent('expand',this);},onTriggerClick:function(e){Roo.log('trigger click');if(this.disabled||!this.triggerList){return; -}this.page=0;this.loadNext=false;if(this.isExpanded()){this.collapse();if(!this.blockFocus){this.inputEl().focus();}}else{this.hasFocus=true;if(this.triggerAction=='all'){this.doQuery(this.allQuery,true);}else{this.doQuery(this.getRawValue());}if(!this.blockFocus){this.inputEl().focus(); -}}},onTickableTriggerClick:function(e){if(this.disabled){return;}this.page=0;this.loadNext=false;this.hasFocus=true;if(this.triggerAction=='all'){this.doQuery(this.allQuery,true);}else{this.doQuery(this.getRawValue());}},onSearchFieldClick:function(e){if(this.hasFocus&&!this.disabled&&e.getTarget().nodeName.toLowerCase()!='button'){this.onTickableFooterButtonClick(e,false,false); -return;}if(this.hasFocus||this.disabled||e.getTarget().nodeName.toLowerCase()=='button'){return;}this.page=0;this.loadNext=false;this.hasFocus=true;if(this.triggerAction=='all'){this.doQuery(this.allQuery,true);}else{this.doQuery(this.getRawValue());}},listKeyPress:function(e){if(e.isSpecialKey()){return false; -}var k=String.fromCharCode(e.getKey()).toUpperCase();var A=false;var B=this.view.getSelectedNodes();var C=false;if(B.length){var ix=this.view.indexOf(B[0]);C=this.store.getAt(ix);if(!C.get(this.displayField)||C.get(this.displayField).substring(0,1).toUpperCase()!=k){C=false; -}}this.store.each(function(v){if(C){if(C.id==v.id){C=false;}return true;}if(v.get(this.displayField)&&v.get(this.displayField).substring(0,1).toUpperCase()==k){A=this.store.indexOf(v);return false;}return true;},this);if(A===false){return true;}this.view.select(A); -var sn=Roo.get(this.view.getSelectedNodes()[0]);sn.scrollIntoView(sn.dom.parentNode,false);},onViewScroll:function(e,t){if(this.view.el.getScroll().top==0||this.view.el.getScroll().top