BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
977f6e37
Commit
977f6e37
authored
Mar 21, 2017
by
Alfredo Sumaran
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'add-filter-focus-style' into 'master'
Add filter focus for filtered search visual tokens See merge request !9875
parents
9b57b4bb
204afc1b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
52 additions
and
4 deletions
+52
-4
filtered_search_manager.js
...ts/javascripts/filtered_search/filtered_search_manager.js
+26
-0
filters.scss
app/assets/stylesheets/framework/filters.scss
+14
-4
filtered_search_manager_spec.js
...vascripts/filtered_search/filtered_search_manager_spec.js
+12
-0
No files found.
app/assets/javascripts/filtered_search/filtered_search_manager.js
View file @
977f6e37
...
@@ -40,6 +40,8 @@ import FilteredSearchContainer from './container';
...
@@ -40,6 +40,8 @@ import FilteredSearchContainer from './container';
this
.
unselectEditTokensWrapper
=
this
.
unselectEditTokens
.
bind
(
this
);
this
.
unselectEditTokensWrapper
=
this
.
unselectEditTokens
.
bind
(
this
);
this
.
editTokenWrapper
=
this
.
editToken
.
bind
(
this
);
this
.
editTokenWrapper
=
this
.
editToken
.
bind
(
this
);
this
.
tokenChange
=
this
.
tokenChange
.
bind
(
this
);
this
.
tokenChange
=
this
.
tokenChange
.
bind
(
this
);
this
.
addInputContainerFocusWrapper
=
this
.
addInputContainerFocus
.
bind
(
this
);
this
.
removeInputContainerFocusWrapper
=
this
.
removeInputContainerFocus
.
bind
(
this
);
this
.
filteredSearchInputForm
=
this
.
filteredSearchInput
.
form
;
this
.
filteredSearchInputForm
=
this
.
filteredSearchInput
.
form
;
this
.
filteredSearchInputForm
.
addEventListener
(
'submit'
,
this
.
handleFormSubmit
);
this
.
filteredSearchInputForm
.
addEventListener
(
'submit'
,
this
.
handleFormSubmit
);
...
@@ -51,11 +53,13 @@ import FilteredSearchContainer from './container';
...
@@ -51,11 +53,13 @@ import FilteredSearchContainer from './container';
this
.
filteredSearchInput
.
addEventListener
(
'keyup'
,
this
.
checkForBackspaceWrapper
);
this
.
filteredSearchInput
.
addEventListener
(
'keyup'
,
this
.
checkForBackspaceWrapper
);
this
.
filteredSearchInput
.
addEventListener
(
'click'
,
this
.
tokenChange
);
this
.
filteredSearchInput
.
addEventListener
(
'click'
,
this
.
tokenChange
);
this
.
filteredSearchInput
.
addEventListener
(
'keyup'
,
this
.
tokenChange
);
this
.
filteredSearchInput
.
addEventListener
(
'keyup'
,
this
.
tokenChange
);
this
.
filteredSearchInput
.
addEventListener
(
'focus'
,
this
.
addInputContainerFocusWrapper
);
this
.
tokensContainer
.
addEventListener
(
'click'
,
FilteredSearchManager
.
selectToken
);
this
.
tokensContainer
.
addEventListener
(
'click'
,
FilteredSearchManager
.
selectToken
);
this
.
tokensContainer
.
addEventListener
(
'dblclick'
,
this
.
editTokenWrapper
);
this
.
tokensContainer
.
addEventListener
(
'dblclick'
,
this
.
editTokenWrapper
);
this
.
clearSearchButton
.
addEventListener
(
'click'
,
this
.
clearSearchWrapper
);
this
.
clearSearchButton
.
addEventListener
(
'click'
,
this
.
clearSearchWrapper
);
document
.
addEventListener
(
'click'
,
gl
.
FilteredSearchVisualTokens
.
unselectTokens
);
document
.
addEventListener
(
'click'
,
gl
.
FilteredSearchVisualTokens
.
unselectTokens
);
document
.
addEventListener
(
'click'
,
this
.
unselectEditTokensWrapper
);
document
.
addEventListener
(
'click'
,
this
.
unselectEditTokensWrapper
);
document
.
addEventListener
(
'click'
,
this
.
removeInputContainerFocusWrapper
);
document
.
addEventListener
(
'keydown'
,
this
.
removeSelectedTokenWrapper
);
document
.
addEventListener
(
'keydown'
,
this
.
removeSelectedTokenWrapper
);
}
}
...
@@ -69,11 +73,13 @@ import FilteredSearchContainer from './container';
...
@@ -69,11 +73,13 @@ import FilteredSearchContainer from './container';
this
.
filteredSearchInput
.
removeEventListener
(
'keyup'
,
this
.
checkForBackspaceWrapper
);
this
.
filteredSearchInput
.
removeEventListener
(
'keyup'
,
this
.
checkForBackspaceWrapper
);
this
.
filteredSearchInput
.
removeEventListener
(
'click'
,
this
.
tokenChange
);
this
.
filteredSearchInput
.
removeEventListener
(
'click'
,
this
.
tokenChange
);
this
.
filteredSearchInput
.
removeEventListener
(
'keyup'
,
this
.
tokenChange
);
this
.
filteredSearchInput
.
removeEventListener
(
'keyup'
,
this
.
tokenChange
);
this
.
filteredSearchInput
.
removeEventListener
(
'focus'
,
this
.
addInputContainerFocusWrapper
);
this
.
tokensContainer
.
removeEventListener
(
'click'
,
FilteredSearchManager
.
selectToken
);
this
.
tokensContainer
.
removeEventListener
(
'click'
,
FilteredSearchManager
.
selectToken
);
this
.
tokensContainer
.
removeEventListener
(
'dblclick'
,
this
.
editTokenWrapper
);
this
.
tokensContainer
.
removeEventListener
(
'dblclick'
,
this
.
editTokenWrapper
);
this
.
clearSearchButton
.
removeEventListener
(
'click'
,
this
.
clearSearchWrapper
);
this
.
clearSearchButton
.
removeEventListener
(
'click'
,
this
.
clearSearchWrapper
);
document
.
removeEventListener
(
'click'
,
gl
.
FilteredSearchVisualTokens
.
unselectTokens
);
document
.
removeEventListener
(
'click'
,
gl
.
FilteredSearchVisualTokens
.
unselectTokens
);
document
.
removeEventListener
(
'click'
,
this
.
unselectEditTokensWrapper
);
document
.
removeEventListener
(
'click'
,
this
.
unselectEditTokensWrapper
);
document
.
removeEventListener
(
'click'
,
this
.
removeInputContainerFocusWrapper
);
document
.
removeEventListener
(
'keydown'
,
this
.
removeSelectedTokenWrapper
);
document
.
removeEventListener
(
'keydown'
,
this
.
removeSelectedTokenWrapper
);
}
}
...
@@ -124,6 +130,26 @@ import FilteredSearchContainer from './container';
...
@@ -124,6 +130,26 @@ import FilteredSearchContainer from './container';
}
}
}
}
addInputContainerFocus
()
{
const
inputContainer
=
this
.
filteredSearchInput
.
closest
(
'.filtered-search-input-container'
);
if
(
inputContainer
)
{
inputContainer
.
classList
.
add
(
'focus'
);
}
}
removeInputContainerFocus
(
e
)
{
const
inputContainer
=
this
.
filteredSearchInput
.
closest
(
'.filtered-search-input-container'
);
const
isElementInFilteredSearch
=
inputContainer
&&
inputContainer
.
contains
(
e
.
target
);
const
isElementInDynamicFilterDropdown
=
e
.
target
.
closest
(
'.filter-dropdown'
)
!==
null
;
const
isElementInStaticFilterDropdown
=
e
.
target
.
closest
(
'ul[data-dropdown]'
)
!==
null
;
if
(
!
isElementInFilteredSearch
&&
!
isElementInDynamicFilterDropdown
&&
!
isElementInStaticFilterDropdown
&&
inputContainer
)
{
inputContainer
.
classList
.
remove
(
'focus'
);
}
}
static
selectToken
(
e
)
{
static
selectToken
(
e
)
{
const
button
=
e
.
target
.
closest
(
'.selectable'
);
const
button
=
e
.
target
.
closest
(
'.selectable'
);
...
...
app/assets/stylesheets/framework/filters.scss
View file @
977f6e37
...
@@ -173,16 +173,26 @@
...
@@ -173,16 +173,26 @@
}
}
}
}
&
:hover
{
@extend
.form-control
:hover
;
}
&
.focus
,
&
.focus
:hover
{
border-color
:
$dropdown-input-focus-border
;
box-shadow
:
0
0
4px
$search-input-focus-shadow-color
;
}
&
.focus
.fa-filter
{
color
:
$common-gray-dark
;
}
.form-control
{
.form-control
{
position
:
relative
;
position
:
relative
;
min-width
:
200px
;
min-width
:
200px
;
padding
:
5px
25px
6px
0
;
padding
:
5px
25px
6px
0
;
border-color
:
transparent
;
border-color
:
transparent
;
&
:focus
~
.fa-filter
{
color
:
$common-gray-dark
;
}
&
:focus
,
&
:focus
,
&
:hover
{
&
:hover
{
outline
:
none
;
outline
:
none
;
...
...
spec/javascripts/filtered_search/filtered_search_manager_spec.js
View file @
977f6e37
...
@@ -246,5 +246,17 @@ const FilteredSearchSpecHelper = require('../helpers/filtered_search_spec_helper
...
@@ -246,5 +246,17 @@ const FilteredSearchSpecHelper = require('../helpers/filtered_search_spec_helper
expect
(
gl
.
FilteredSearchVisualTokens
.
unselectTokens
).
toHaveBeenCalled
();
expect
(
gl
.
FilteredSearchVisualTokens
.
unselectTokens
).
toHaveBeenCalled
();
});
});
});
});
describe
(
'toggleInputContainerFocus'
,
()
=>
{
it
(
'toggles on focus'
,
()
=>
{
input
.
focus
();
expect
(
document
.
querySelector
(
'.filtered-search-input-container'
).
classList
.
contains
(
'focus'
)).
toEqual
(
true
);
});
it
(
'toggles on blur'
,
()
=>
{
input
.
blur
();
expect
(
document
.
querySelector
(
'.filtered-search-input-container'
).
classList
.
contains
(
'focus'
)).
toEqual
(
false
);
});
});
});
});
})();
})();
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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