Skip to content
GitLab
Explore
Projects
Groups
Snippets
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
4be126e0
Commit
4be126e0
authored
11 years ago
by
Chris Rebert
Browse files
Options
Download
Plain Diff
Merge pull request #11745 from XhmikosR/function-spaces
Be consistent with function () spaces
parents
650279f7
5e2ef69e
main
cleanup-floating-forms
cssvar-function
dependabot/npm_and_yarn/stylelint-and-stylelint-config-twbs-bootstrap-15.3.0
extend-snippets
feat/data-target
floating-always-visible
floating-labels-icons
fod-main-banner
form-controls-with-icons
gh-pages
gh-pages-530-alpha2
github/fork/719media/patch-13
github/fork/719media/patch-14
github/fork/719media/patch-9
github/fork/ChellyAhmed/fix-typo-reboot.md
github/fork/ChellyAhmed/offcanvas-scroll-back
github/fork/CtrlAltLilith/main
github/fork/Elysiome/offcanvas-optional-window-resizing
github/fork/JanSargsyan/main
github/fork/LunicLynx/support-different-line-height-for-buttons
github/fork/Psixodelik/main
github/fork/Ronid1/ronid1/offcanvas_static_backdrop
github/fork/RyanBerliner/tooltip-accessibility
github/fork/SantiagoPVazquez/Feature-default-border-bottom-to-dropdown-item
github/fork/Sir-Genius/utils
github/fork/Sumit-Singh-8/main
github/fork/Viktor-VERA2020/offcanvas-slide
github/fork/Zivangu9/input-group-for-form-control-plaintext
github/fork/alpadev/alpadev/call-dispose-on-component-reinstantiation
github/fork/astagi/fix/tree-shake-modules
github/fork/compnerd/dark-accordion-icon
github/fork/derSascha/dropdown-dont-close-on-input-click
github/fork/dev-ph1l/main
github/fork/donquixote/issue-33861-utl-mixin
github/fork/florianlacreuse/mixin-make-row-gutter-y
github/fork/gregorw/main
github/fork/iteggmbh/transitionend-dispose-race
github/fork/jdelStrother/patch-1
github/fork/jonnysp/form-floating
github/fork/jonnysp/independent-offcanvas
github/fork/jonnysp/theme-dark-on-card-and-modal-fix
github/fork/josefdlange/floating-label-placeholder-opacity
github/fork/julien-deramond/enhance-change-version.js
github/fork/julien-deramond/main-jd-fix-offset-content
github/fork/julien-deramond/main-jd-issue-with-utitlies
github/fork/julien-deramond/main-xmr-pa11y-ci-jd-add-hideElements
github/fork/kyletsang/fix-tooltip-padding
github/fork/lacutah/CheckboxCenteringDocumentation
github/fork/lekoala/patch-3
github/fork/louismaximepiton/main-kld-lmp-collapse-proposal
github/fork/louismaximepiton/main-lmp-card-inner-border-radius-fix
github/fork/louismaximepiton/main-lmp-carousel-multiple-images
github/fork/louismaximepiton/main-lmp-css-var-init
github/fork/louismaximepiton/main-lmp-disabled-floating-label-fix
github/fork/louismaximepiton/main-lmp-input-range-fix
github/fork/louismaximepiton/main-lmp-shift-color
github/fork/louismaximepiton/main-lmp-table-active-tr-fix
github/fork/maciek-szn/switch
github/fork/michael-roth/feature/19964-multiple-tab-targets
github/fork/mistic100/dom-utils
github/fork/nkdas91/accordion
github/fork/nstungcom/fix-missing-modal-open-class
github/fork/oraliahdz/animation-utilities
github/fork/pine3ree/patch-7
github/fork/pouwerkerk/unindent-scss-docs-shortcode
github/fork/smares/smares-no-scolling-on-modal-close
github/fork/tgm-git/patch-1
gs-forms
gs-toasts-with-animated-progress-bar
gs/add-history-helper
gs/change-version-dir-on-docs
gs/data-must-set-onlu-one-instance
gs/docs/fix-drop-down-error
gs/event-handler-2
gs/make-docs-js-build
gs/make-simple-attribute-toggler
gs/popover-fix-doc
gs/provide-steConfig-method
gs/scrollspy-smoothscroll-option-use-browser-history
gs/streamline-jqueryInterface
gs/support-drop-down-in-navbar
gs/test-js-generic-trigger
gs/try-web-components
gs/tweak-collapse-js-selector
gs/use-event-handler-in-cocmponent
gs/use-rollup-replace-for-version
jo-docs-thanks-page
jo-ssr-friendly
logical-props-spacing-utils
main-fod-disabled-form-check-label
main-fod-nested-accordion
main-fod-simpler-table-structure
main-fod-table-separator
main-fod-utilities-contrast
main-jd-abbr-title
main-jd-add-chips
main-jd-add-doc-for-sass-custom-colors
main-jd-add-enable-host-to-handle-web-components
main-jd-browserstack-fine-tune
main-jd-browserstack-updates
main-jd-docs-consistent-usage-of-css-sections-step-2
main-jd-fix-docs-headers-in-white
main-jd-fix-highlight-docs-border-radius
main-jd-fix-placeholder-color-background-params-for-img-markup
main-jd-glossary-experiment
main-jd-postcss-drop-empty-css-vars
main-jd-proto-doc-astro
main-jd-skip-navigation-component
main-jd-stackblitz-for-examples
main-jd-upgrade-browserlistrc
main-jd-use-host
main-lmp-dark-theme-customization
main-lmp-handle-scroll-target
main-lmp-tab-fix
main-mc-opensearch
main-xmr-bundlewatch-action
main-xmr-eslint-plugin-compat
main-xmr-hugo-docs-vendor
main-xmr-hugo-rm-ver
main-xmr-linkinator-prod
main-xmr-min-mangle
main-xmr-pa11y-ci
more-darkmode-examples
nested-dropdowns
patrickhlauke-issue37428
patrickhlauke-use-of-color-tweaks
pr/34102
pr/37590
previous-next-docs-links
sticky-thead
utilities-functions-mixin
v3-dev
v4-dev
v4-dev-dropdown-hide-method
v530-dev
v6-postcss-custom-media
v6-spinner-dots
v6/gs/use-floating-ui-in-place-of-popper
xmr/dev
xmr/docs-png
xmr/docs-svgs
xmr/hugo-reorg-files
xmr/js-2
xmr/markdownlint
xmr/prepare-530-alpha2
xmr/xo
v5.3.0-alpha1
v5.2.3
v5.2.2
v5.2.1
v5.2.0
v5.2.0-beta1
v5.1.3
v5.1.2
v5.1.1
v5.1.0
v5.0.2
v5.0.1
v5.0.0
v5.0.0-beta3
v5.0.0-beta2
v5.0.0-beta1
v5.0.0-alpha3
v5.0.0-alpha2
v5.0.0-alpha1
v4.6.2
v4.6.1
v4.6.0
v4.5.3
v4.5.2
v4.5.1
v4.5.0
v4.4.1
v4.4.0
v4.3.1
v4.3.0
v4.2.1
v4.2.0
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.0
v4.0.0-beta.3
v4.0.0-beta.2
v4.0.0-beta
v4.0.0-alpha.6
v4.0.0-alpha.5
v4.0.0-alpha.4
v4.0.0-alpha.3
v4.0.0-alpha.2
v4.0.0-alpha
v3.4.1
v3.4.0
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.2
v3.3.1
v3.3.0
v3.2.0
v3.1.1
v3.1.0
No related merge requests found
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
dist/js/bootstrap.js
+2
-2
dist/js/bootstrap.js
js/tests/unit/modal.js
+7
-7
js/tests/unit/modal.js
js/tests/unit/phantom.js
+4
-4
js/tests/unit/phantom.js
js/tests/unit/popover.js
+2
-2
js/tests/unit/popover.js
js/tests/unit/tab.js
+2
-2
js/tests/unit/tab.js
js/tests/unit/tooltip.js
+17
-17
js/tests/unit/tooltip.js
js/tooltip.js
+2
-2
js/tooltip.js
with
36 additions
and
36 deletions
+36
-36
dist/js/bootstrap.js
+
2
-
2
View file @
4be126e0
...
...
@@ -1272,7 +1272,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}
}
Tooltip
.
prototype
.
applyPlacement
=
function
(
offset
,
placement
)
{
Tooltip
.
prototype
.
applyPlacement
=
function
(
offset
,
placement
)
{
var
replace
var
$tip
=
this
.
tip
()
var
width
=
$tip
[
0
].
offsetWidth
...
...
@@ -1323,7 +1323,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
if
(
replace
)
$tip
.
offset
(
offset
)
}
Tooltip
.
prototype
.
replaceArrow
=
function
(
delta
,
dimension
,
position
)
{
Tooltip
.
prototype
.
replaceArrow
=
function
(
delta
,
dimension
,
position
)
{
this
.
arrow
().
css
(
position
,
delta
?
(
50
*
(
1
-
delta
/
dimension
)
+
"
%
"
)
:
''
)
}
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/modal.js
+
7
-
7
View file @
4be126e0
...
...
@@ -74,7 +74,7 @@ $(function () {
ok
(
$
(
'
#modal-test
'
).
length
,
'
modal inserted into dom
'
)
$
(
this
).
modal
(
"
hide
"
)
})
.
on
(
"
hidden.bs.modal
"
,
function
()
{
.
on
(
"
hidden.bs.modal
"
,
function
()
{
ok
(
!
$
(
'
#modal-test
'
).
is
(
"
:visible
"
),
'
modal hidden
'
)
$
(
'
#modal-test
'
).
remove
()
start
()
...
...
@@ -92,7 +92,7 @@ $(function () {
ok
(
$
(
'
#modal-test
'
).
length
,
'
modal inserted into dom
'
)
div
.
modal
(
"
toggle
"
)
})
.
on
(
"
hidden.bs.modal
"
,
function
()
{
.
on
(
"
hidden.bs.modal
"
,
function
()
{
ok
(
!
$
(
'
#modal-test
'
).
is
(
"
:visible
"
),
'
modal hidden
'
)
div
.
remove
()
start
()
...
...
@@ -110,7 +110,7 @@ $(function () {
ok
(
$
(
'
#modal-test
'
).
length
,
'
modal inserted into dom
'
)
div
.
find
(
'
.close
'
).
click
()
})
.
on
(
"
hidden.bs.modal
"
,
function
()
{
.
on
(
"
hidden.bs.modal
"
,
function
()
{
ok
(
!
$
(
'
#modal-test
'
).
is
(
"
:visible
"
),
'
modal hidden
'
)
div
.
remove
()
start
()
...
...
@@ -127,7 +127,7 @@ $(function () {
ok
(
$
(
'
#modal-test
'
).
is
(
"
:visible
"
),
'
modal visible
'
)
div
.
modal
(
"
hide
"
)
})
.
on
(
"
hidden.bs.modal
"
,
function
()
{
.
on
(
"
hidden.bs.modal
"
,
function
()
{
ok
(
!
$
(
'
#modal-test
'
).
is
(
"
:visible
"
),
'
modal hidden
'
)
div
.
remove
()
start
()
...
...
@@ -146,7 +146,7 @@ $(function () {
ok
(
$
(
'
#modal-test
'
).
is
(
"
:visible
"
),
'
modal visible
'
)
$
(
'
#modal-test
'
).
click
()
})
.
bind
(
"
hidden.bs.modal
"
,
function
()
{
.
bind
(
"
hidden.bs.modal
"
,
function
()
{
ok
(
!
$
(
'
#modal-test
'
).
is
(
"
:visible
"
),
'
modal hidden
'
)
div
.
remove
()
start
()
...
...
@@ -164,7 +164,7 @@ $(function () {
triggered
=
0
$
(
'
#modal-test
'
).
click
()
})
.
one
(
"
hidden.bs.modal
"
,
function
()
{
.
one
(
"
hidden.bs.modal
"
,
function
()
{
div
.
modal
(
"
show
"
)
})
.
bind
(
"
hide.bs.modal
"
,
function
()
{
...
...
@@ -184,7 +184,7 @@ $(function () {
$
(
'
#close
'
).
click
()
ok
(
!
$
(
'
#modal-test
'
).
is
(
"
:visible
"
),
'
modal hidden
'
)
})
.
one
(
"
hidden.bs.modal
"
,
function
()
{
.
one
(
"
hidden.bs.modal
"
,
function
()
{
div
.
one
(
'
hidden.bs.modal
'
,
function
()
{
start
()
}).
modal
(
"
show
"
)
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/phantom.js
+
4
-
4
View file @
4be126e0
...
...
@@ -22,7 +22,7 @@
}
// These methods connect QUnit to PhantomJS.
QUnit
.
log
=
function
(
obj
)
{
QUnit
.
log
=
function
(
obj
)
{
// What is this I don’t even
if
(
obj
.
message
===
'
[object Object], undefined:undefined
'
)
{
return
}
// Parse some stuff before sending it.
...
...
@@ -32,15 +32,15 @@
sendMessage
(
'
qunit.log
'
,
obj
.
result
,
actual
,
expected
,
obj
.
message
,
obj
.
source
)
}
QUnit
.
testStart
=
function
(
obj
)
{
QUnit
.
testStart
=
function
(
obj
)
{
sendMessage
(
'
qunit.testStart
'
,
obj
.
name
)
}
QUnit
.
testDone
=
function
(
obj
)
{
QUnit
.
testDone
=
function
(
obj
)
{
sendMessage
(
'
qunit.testDone
'
,
obj
.
name
,
obj
.
failed
,
obj
.
passed
,
obj
.
total
)
}
QUnit
.
moduleStart
=
function
(
obj
)
{
QUnit
.
moduleStart
=
function
(
obj
)
{
sendMessage
(
'
qunit.moduleStart
'
,
obj
.
name
)
}
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/popover.js
+
2
-
2
View file @
4be126e0
...
...
@@ -97,7 +97,7 @@ $(function () {
$
(
'
#qunit-fixture
'
).
empty
()
})
test
(
"
should respect custom classes
"
,
function
()
{
test
(
"
should respect custom classes
"
,
function
()
{
$
.
support
.
transition
=
false
var
popover
=
$
(
'
<a href="#">@fat</a>
'
)
.
appendTo
(
'
#qunit-fixture
'
)
...
...
@@ -118,7 +118,7 @@ $(function () {
})
test
(
"
should destroy popover
"
,
function
()
{
var
popover
=
$
(
'
<div/>
'
).
popover
({
trigger
:
'
hover
'
}).
on
(
'
click.foo
'
,
function
(){})
var
popover
=
$
(
'
<div/>
'
).
popover
({
trigger
:
'
hover
'
}).
on
(
'
click.foo
'
,
function
()
{})
ok
(
popover
.
data
(
'
bs.popover
'
),
'
popover has data
'
)
ok
(
$
.
_data
(
popover
[
0
],
'
events
'
).
mouseover
&&
$
.
_data
(
popover
[
0
],
'
events
'
).
mouseout
,
'
popover has hover event
'
)
ok
(
$
.
_data
(
popover
[
0
],
'
events
'
).
click
[
0
].
namespace
==
'
foo
'
,
'
popover has extra click.foo event
'
)
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/tab.js
+
2
-
2
View file @
4be126e0
...
...
@@ -76,9 +76,9 @@ $(function () {
+
'
</ul>
'
$
(
dropHTML
).
find
(
'
ul>li:first a
'
).
tab
(
'
show
'
).
end
()
.
find
(
'
ul>li:last a
'
).
on
(
'
show
'
,
function
(
event
){
.
find
(
'
ul>li:last a
'
).
on
(
'
show
'
,
function
(
event
)
{
equal
(
event
.
relatedTarget
.
hash
,
"
#1-1
"
)
}).
on
(
'
shown
'
,
function
(
event
){
}).
on
(
'
shown
'
,
function
(
event
)
{
equal
(
event
.
relatedTarget
.
hash
,
"
#1-1
"
)
}).
tab
(
'
show
'
)
})
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/tooltip.js
+
17
-
17
View file @
4be126e0
...
...
@@ -69,7 +69,7 @@ $(function () {
test
(
"
should fire show event
"
,
function
()
{
stop
()
var
tooltip
=
$
(
'
<div title="tooltip title"></div>
'
)
.
on
(
"
show.bs.tooltip
"
,
function
()
{
.
on
(
"
show.bs.tooltip
"
,
function
()
{
ok
(
true
,
"
show was called
"
)
start
()
})
...
...
@@ -79,7 +79,7 @@ $(function () {
test
(
"
should fire shown event
"
,
function
()
{
stop
()
var
tooltip
=
$
(
'
<div title="tooltip title"></div>
'
)
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
ok
(
true
,
"
shown was called
"
)
start
()
})
...
...
@@ -89,12 +89,12 @@ $(function () {
test
(
"
should not fire shown event when default prevented
"
,
function
()
{
stop
()
var
tooltip
=
$
(
'
<div title="tooltip title"></div>
'
)
.
on
(
"
show.bs.tooltip
"
,
function
(
e
)
{
.
on
(
"
show.bs.tooltip
"
,
function
(
e
)
{
e
.
preventDefault
()
ok
(
true
,
"
show was called
"
)
start
()
})
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
ok
(
false
,
"
shown was called
"
)
})
.
tooltip
(
'
show
'
)
...
...
@@ -103,10 +103,10 @@ $(function () {
test
(
"
should fire hide event
"
,
function
()
{
stop
()
var
tooltip
=
$
(
'
<div title="tooltip title"></div>
'
)
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
$
(
this
).
tooltip
(
'
hide
'
)
})
.
on
(
"
hide.bs.tooltip
"
,
function
()
{
.
on
(
"
hide.bs.tooltip
"
,
function
()
{
ok
(
true
,
"
hide was called
"
)
start
()
})
...
...
@@ -116,10 +116,10 @@ $(function () {
test
(
"
should fire hidden event
"
,
function
()
{
stop
()
var
tooltip
=
$
(
'
<div title="tooltip title"></div>
'
)
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
$
(
this
).
tooltip
(
'
hide
'
)
})
.
on
(
"
hidden.bs.tooltip
"
,
function
()
{
.
on
(
"
hidden.bs.tooltip
"
,
function
()
{
ok
(
true
,
"
hidden was called
"
)
start
()
})
...
...
@@ -129,15 +129,15 @@ $(function () {
test
(
"
should not fire hidden event when default prevented
"
,
function
()
{
stop
()
var
tooltip
=
$
(
'
<div title="tooltip title"></div>
'
)
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
.
on
(
"
shown.bs.tooltip
"
,
function
()
{
$
(
this
).
tooltip
(
'
hide
'
)
})
.
on
(
"
hide.bs.tooltip
"
,
function
(
e
)
{
.
on
(
"
hide.bs.tooltip
"
,
function
(
e
)
{
e
.
preventDefault
()
ok
(
true
,
"
hide was called
"
)
start
()
})
.
on
(
"
hidden.bs.tooltip
"
,
function
()
{
.
on
(
"
hidden.bs.tooltip
"
,
function
()
{
ok
(
false
,
"
hidden was called
"
)
})
.
tooltip
(
'
show
'
)
...
...
@@ -258,7 +258,7 @@ $(function () {
})
test
(
"
should destroy tooltip
"
,
function
()
{
var
tooltip
=
$
(
'
<div/>
'
).
tooltip
().
on
(
'
click.foo
'
,
function
(){})
var
tooltip
=
$
(
'
<div/>
'
).
tooltip
().
on
(
'
click.foo
'
,
function
()
{})
ok
(
tooltip
.
data
(
'
bs.tooltip
'
),
'
tooltip has data
'
)
ok
(
$
.
_data
(
tooltip
[
0
],
'
events
'
).
mouseover
&&
$
.
_data
(
tooltip
[
0
],
'
events
'
).
mouseout
,
'
tooltip has hover event
'
)
ok
(
$
.
_data
(
tooltip
[
0
],
'
events
'
).
click
[
0
].
namespace
==
'
foo
'
,
'
tooltip has extra click.foo event
'
)
...
...
@@ -297,7 +297,7 @@ $(function () {
tooltip
.
tooltip
(
'
hide
'
)
})
test
(
"
should place tooltip inside window
"
,
function
(){
test
(
"
should place tooltip inside window
"
,
function
()
{
var
container
=
$
(
"
<div />
"
).
appendTo
(
"
body
"
)
.
css
({
position
:
"
absolute
"
,
width
:
200
,
height
:
200
,
bottom
:
0
,
left
:
0
})
,
tooltip
=
$
(
"
<a href='#' title='Very very very very very very very very long tooltip'>Hover me</a>
"
)
...
...
@@ -308,7 +308,7 @@ $(function () {
stop
()
setTimeout
(
function
(){
setTimeout
(
function
()
{
ok
(
$
(
"
.tooltip
"
).
offset
().
left
>=
0
)
start
()
...
...
@@ -316,7 +316,7 @@ $(function () {
},
100
)
})
test
(
"
should place tooltip on top of element
"
,
function
(){
test
(
"
should place tooltip on top of element
"
,
function
()
{
var
container
=
$
(
"
<div />
"
).
appendTo
(
"
body
"
)
.
css
({
position
:
"
absolute
"
,
bottom
:
0
,
left
:
0
,
textAlign
:
"
right
"
,
width
:
300
,
height
:
300
})
,
p
=
$
(
"
<p style='margin-top:200px' />
"
).
appendTo
(
container
)
...
...
@@ -328,7 +328,7 @@ $(function () {
stop
()
setTimeout
(
function
(){
setTimeout
(
function
()
{
var
tooltip
=
container
.
find
(
"
.tooltip
"
)
start
()
...
...
@@ -337,7 +337,7 @@ $(function () {
},
100
)
})
test
(
"
should add position class before positioning so that position-specific styles are taken into account
"
,
function
(){
test
(
"
should add position class before positioning so that position-specific styles are taken into account
"
,
function
()
{
$
(
"
head
"
).
append
(
'
<style> .tooltip.right { white-space: nowrap; } .tooltip.right .tooltip-inner { max-width: none; } </style>
'
)
var
container
=
$
(
"
<div />
"
).
appendTo
(
"
body
"
)
...
...
This diff is collapsed.
Click to expand it.
js/tooltip.js
+
2
-
2
View file @
4be126e0
...
...
@@ -192,7 +192,7 @@
}
}
Tooltip
.
prototype
.
applyPlacement
=
function
(
offset
,
placement
)
{
Tooltip
.
prototype
.
applyPlacement
=
function
(
offset
,
placement
)
{
var
replace
var
$tip
=
this
.
tip
()
var
width
=
$tip
[
0
].
offsetWidth
...
...
@@ -243,7 +243,7 @@
if
(
replace
)
$tip
.
offset
(
offset
)
}
Tooltip
.
prototype
.
replaceArrow
=
function
(
delta
,
dimension
,
position
)
{
Tooltip
.
prototype
.
replaceArrow
=
function
(
delta
,
dimension
,
position
)
{
this
.
arrow
().
css
(
position
,
delta
?
(
50
*
(
1
-
delta
/
dimension
)
+
"
%
"
)
:
''
)
}
...
...
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
Menu
Explore
Projects
Groups
Snippets