Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Bootstrap
bootstrap
Commits
70f4a30d
Commit
70f4a30d
authored
7 years ago
by
Johann-S
Committed by
GitHub
7 years ago
Browse files
Options
Download
Email Patches
Plain Diff
Better management of dropdown/dropup with alignment
parent
b36d8ae6
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
js/src/dropdown.js
+26
-22
js/src/dropdown.js
js/tests/visual/dropdown.html
+28
-10
js/tests/visual/dropdown.html
with
54 additions
and
32 deletions
+54
-32
js/src/dropdown.js
+
26
-
22
View file @
70f4a30d
...
...
@@ -68,8 +68,10 @@ const Dropdown = (($) => {
}
const
AttachmentMap
=
{
TOP
:
'
top-start
'
,
BOTTOM
:
'
bottom-start
'
TOP
:
'
top-start
'
,
TOPEND
:
'
top-end
'
,
BOTTOM
:
'
bottom-start
'
,
BOTTOMEND
:
'
bottom-end
'
}
const
Default
=
{
...
...
@@ -144,21 +146,21 @@ const Dropdown = (($) => {
return
}
// Handle dropup
const
dropdownPlacement
=
$
(
this
.
_element
).
parent
().
hasClass
(
ClassName
.
DROPUP
)
?
AttachmentMap
.
TOP
:
this
.
_config
.
placement
this
.
_popper
=
new
Popper
(
this
.
_element
,
this
.
_menu
,
{
placement
:
dropdownPlacement
,
let
element
=
this
.
_element
// for dropup with alignment we use the parent as popper container
if
(
$
(
parent
).
hasClass
(
ClassName
.
DROPUP
))
{
if
(
$
(
this
.
_menu
).
hasClass
(
ClassName
.
MENULEFT
)
||
$
(
this
.
_menu
).
hasClass
(
ClassName
.
MENURIGHT
))
{
element
=
parent
}
}
this
.
_popper
=
new
Popper
(
element
,
this
.
_menu
,
{
placement
:
this
.
_getPlacement
(),
modifiers
:
{
offset
:
{
offset
:
this
.
_config
.
offset
},
flip
:
{
enabled
:
this
.
_config
.
flip
},
beforeApplyStyle
:
{
order
:
899
,
// 900 is the order of applyStyle
enabled
:
true
,
fn
:
this
.
_beforePopperApplyStyle
}
}
})
...
...
@@ -238,21 +240,23 @@ const Dropdown = (($) => {
return
this
.
_menu
}
_beforePopperApplyStyle
(
data
)
{
if
(
$
(
data
.
instance
.
popper
).
hasClass
(
ClassName
.
MENURIGHT
))
{
data
.
styles
=
{
right
:
0
,
left
:
'
auto
'
_getPlacement
()
{
const
$parentDropdown
=
$
(
this
.
_element
).
parent
()
let
placement
=
this
.
_config
.
placement
// Handle dropup
if
(
$parentDropdown
.
hasClass
(
ClassName
.
DROPUP
)
||
this
.
_config
.
placement
===
AttachmentMap
.
TOP
)
{
placement
=
AttachmentMap
.
TOP
if
(
$
(
this
.
_menu
).
hasClass
(
ClassName
.
MENURIGHT
))
{
placement
=
AttachmentMap
.
TOPEND
}
}
if
(
$
(
data
.
instance
.
popper
).
hasClass
(
ClassName
.
MENULEFT
))
{
data
.
styles
=
{
right
:
'
auto
'
,
left
:
0
else
{
if
(
$
(
this
.
_menu
).
hasClass
(
ClassName
.
MENURIGHT
))
{
placement
=
AttachmentMap
.
BOTTOMEND
}
}
return
data
return
placement
}
// static
...
...
This diff is collapsed.
Click to expand it.
js/tests/visual/dropdown.html
+
28
-
10
View file @
70f4a30d
...
...
@@ -61,11 +61,10 @@
<div
class=
"row"
>
<div
class=
"col-sm-12 mt-4"
>
<!-- Default dropup button -->
<div
class=
"btn-group dropup"
>
<button
type=
"button"
class=
"btn btn-secondary"
>
Dropup
</button>
<button
type=
"button"
class=
"btn btn-secondary"
>
Dropup
split
</button>
<button
type=
"button"
class=
"btn btn-secondary dropdown-toggle"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
<span
class=
"sr-only"
>
Toggle Dropdown
</span>
<span
class=
"sr-only"
>
Dropup split
</span>
</button>
<div
class=
"dropdown-menu"
>
<a
class=
"dropdown-item"
href=
"#"
>
Action
</a>
...
...
@@ -74,6 +73,15 @@
</div>
</div>
<div
class=
"btn-group dropup"
>
<button
type=
"button"
class=
"btn btn-secondary dropdown-toggle"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
Dropup
</button>
<div
class=
"dropdown-menu"
>
<a
class=
"dropdown-item"
href=
"#"
>
Action
</a>
<a
class=
"dropdown-item"
href=
"#"
>
Another action
</a>
<a
class=
"dropdown-item"
href=
"#"
>
Something else here
</a>
</div>
</div>
<div
class=
"btn-group"
>
<button
type=
"button"
class=
"btn btn-secondary dropdown-toggle"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
This dropdown's menu is right-aligned
...
...
@@ -84,20 +92,30 @@
<button
class=
"dropdown-item"
type=
"button"
>
Something else here
</button>
</div>
</div>
<div
class=
"btn-group"
>
<button
type=
"button"
class=
"btn btn-secondary dropdown-toggle"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
This dropdown's menu is left-aligned
</div>
<div
class=
"col-sm-12 mt-4"
>
<div
class=
"btn-group dropup"
role=
"group"
>
<a
href=
"#"
class=
"btn btn-secondary"
>
Dropup split align right
</a>
<button
type=
"button"
id=
"dropdown-page-subheader-button-3"
class=
"btn btn-secondary dropdown-toggle dropdown-toggle-split"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
<span
class=
"sr-only"
>
Product actions
</span>
</button>
<div
class=
"dropdown-menu dropdown-menu-
lef
t"
>
<div
class=
"dropdown-menu dropdown-menu-
righ
t"
>
<button
class=
"dropdown-item"
type=
"button"
>
Action
</button>
<button
class=
"dropdown-item"
type=
"button"
>
Another action
</button>
<button
class=
"dropdown-item"
type=
"button"
>
Something else here
</button>
<button
class=
"dropdown-item"
type=
"button"
>
Something else here
with a long text
</button>
</div>
</div>
<div
class=
"btn-group dropup"
>
<button
type=
"button"
class=
"btn btn-secondary dropdown-toggle"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
Dropup align right
</button>
<div
class=
"dropdown-menu dropdown-menu-right"
>
<button
class=
"dropdown-item"
type=
"button"
>
Action
</button>
<button
class=
"dropdown-item"
type=
"button"
>
Another action
</button>
<button
class=
"dropdown-item"
type=
"button"
>
Something else here with a long text
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script
src=
"../../../docs/assets/js/vendor/jquery-slim.min.js"
></script>
<script
src=
"../../../docs/assets/js/vendor/popper.min.js"
></script>
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment