Skip to content

Commit 81fc161

Browse files
committed
[refactor] improve dropdown
1 parent ead8907 commit 81fc161

File tree

2 files changed

+40
-17
lines changed

2 files changed

+40
-17
lines changed

‎src/css/form.css‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1308,7 +1308,7 @@ input[type="range"]:disabled::-moz-range-progress{
13081308
border-radius:var(--theme-radius);
13091309
padding:0.5em0;
13101310
position: absolute;
1311-
top:calc(100%+calc(var(--layout-line-width) *2));
1311+
top:100%;
13121312
left:0;
13131313
width:100%;
13141314
min-width:12em;

‎src/js/dropdown.js‎

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
vardropdown=(function(){
22

3+
var_currentFormDropdown=null;
4+
35
varmod={};
46

57
mod.open=function(){
@@ -36,30 +38,46 @@ var dropdown = (function(){
3638

3739
varbind={};
3840

41+
vardocumentEvent={};
42+
43+
documentEvent.add=function(){
44+
document.addEventListener("click",documentEvent.clickOut,false);
45+
};
46+
47+
documentEvent.remove=function(){
48+
document.removeEventListener("click",documentEvent.clickOut,false);
49+
};
50+
51+
documentEvent.clickOut=function(){
52+
if(!event.path.includes(_currentFormDropdown)){
53+
close();
54+
};
55+
};
56+
3957
bind.formDropdown=function(){
4058
varallFormDropdown=helper.eA(".form-dropdown");
4159
allFormDropdown.forEach(function(arrayItem,index){
4260
varformDropdown=arrayItem;
4361
varformDropdownToggle=formDropdown.querySelector(".form-dropdown-toggle");
4462
varallFormDropdownMenuItem=formDropdown.querySelectorAll(".form-dropdown-menu-item");
4563
formDropdownToggle.addEventListener("click",function(){
64+
_currentFormDropdown=formDropdown;
4665
mod.toggle();
47-
render.toggle(formDropdown);
48-
render.offset(formDropdown);
66+
render.toggle();
4967
},false);
5068
allFormDropdownMenuItem.forEach(function(arrayItem,index){
5169
arrayItem.addEventListener("click",function(){
5270
mod.close();
53-
render.close(formDropdown);
71+
render.close();
5472
},false);
5573
});
5674
});
5775
};
5876

5977
varrender={};
6078

61-
render.offset=function(formDropdown){
62-
varformDropdownMenu=formDropdown.querySelector(".form-dropdown-menu");
79+
render.offset=function(){
80+
varformDropdownMenu=_currentFormDropdown.querySelector(".form-dropdown-menu");
6381
varbox=formDropdownMenu.getBoundingClientRect();
6482
if(box.left+box.width>window.innerWidth){
6583
formDropdownMenu.style.right="0";
@@ -69,28 +87,33 @@ var dropdown = (function(){
6987
};
7088
};
7189

72-
render.toggle=function(formDropdown){
73-
if(formDropdown.classList.contains("form-dropdown-open")){
90+
render.toggle=function(){
91+
if(_currentFormDropdown.classList.contains("form-dropdown-open")){
7492
mod.close();
75-
helper.removeClass(formDropdown,"form-dropdown-open");
93+
helper.removeClass(_currentFormDropdown,"form-dropdown-open");
94+
documentEvent.remove();
95+
render.offset();
96+
_currentFormDropdown=null;
7697
}else{
7798
mod.open();
78-
helper.addClass(formDropdown,"form-dropdown-open");
99+
_currentFormDropdown=_currentFormDropdown;
100+
helper.addClass(_currentFormDropdown,"form-dropdown-open");
101+
documentEvent.add(_currentFormDropdown);
102+
render.offset();
79103
};
80104
};
81105

82-
render.close=function(formDropdown){
106+
render.close=function(){
83107
mod.close();
84-
helper.removeClass(formDropdown,"form-dropdown-open");
85-
};
86-
87-
render.open=function(formDropdown){
88-
mod.open();
89-
helper.addClass(formDropdown,"form-dropdown-open");
108+
helper.removeClass(_currentFormDropdown,"form-dropdown-open");
109+
documentEvent.remove();
110+
render.offset();
111+
_currentFormDropdown=null;
90112
};
91113

92114
varclose=function(){
93115
mod.close();
116+
render.close();
94117
varallFormDropdown=helper.eA(".form-dropdown");
95118
allFormDropdown.forEach(function(arrayItem,index){
96119
helper.removeClass(arrayItem,"form-dropdown-open");

0 commit comments

Comments
(0)