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
bc84137d
Commit
bc84137d
authored
Jan 23, 2017
by
Clement Ho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add caching of droplab ajax requests
parent
b55c1bc4
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
137 additions
and
39 deletions
+137
-39
droplab_ajax.js
app/assets/javascripts/droplab/droplab_ajax.js
+25
-16
droplab_ajax_filter.js
app/assets/javascripts/droplab/droplab_ajax_filter.js
+38
-23
26844-new-search-bar-performs-a-new-request-for-each-tag.yml
...44-new-search-bar-performs-a-new-request-for-each-tag.yml
+4
-0
dropdown_assignee_spec.rb
...features/issues/filtered_search/dropdown_assignee_spec.rb
+18
-0
dropdown_author_spec.rb
spec/features/issues/filtered_search/dropdown_author_spec.rb
+18
-0
dropdown_label_spec.rb
spec/features/issues/filtered_search/dropdown_label_spec.rb
+17
-0
dropdown_milestone_spec.rb
...eatures/issues/filtered_search/dropdown_milestone_spec.rb
+17
-0
No files found.
app/assets/javascripts/droplab/droplab_ajax.js
View file @
bc84137d
...
...
@@ -9,6 +9,7 @@ require('../window')(function(w){
w
.
droplabAjax
=
{
_loadUrlData
:
function
_loadUrlData
(
url
)
{
var
self
=
this
;
return
new
Promise
(
function
(
resolve
,
reject
)
{
var
xhr
=
new
XMLHttpRequest
;
xhr
.
open
(
'GET'
,
url
,
true
);
...
...
@@ -16,6 +17,7 @@ require('../window')(function(w){
if
(
xhr
.
readyState
===
XMLHttpRequest
.
DONE
)
{
if
(
xhr
.
status
===
200
)
{
var
data
=
JSON
.
parse
(
xhr
.
responseText
);
self
.
cache
[
url
]
=
data
;
return
resolve
(
data
);
}
else
{
return
reject
([
xhr
.
responseText
,
xhr
.
status
]);
...
...
@@ -26,8 +28,21 @@ require('../window')(function(w){
});
},
_loadData
:
function
_loadData
(
data
,
config
,
self
)
{
if
(
config
.
loadingTemplate
)
{
var
dataLoadingTemplate
=
self
.
hook
.
list
.
list
.
querySelector
(
'[data-loading-template]'
);
if
(
dataLoadingTemplate
)
{
dataLoadingTemplate
.
outerHTML
=
self
.
listTemplate
;
}
}
self
.
hook
.
list
[
config
.
method
].
call
(
self
.
hook
.
list
,
data
);
},
init
:
function
init
(
hook
)
{
var
self
=
this
;
self
.
cache
=
self
.
cache
||
{};
var
config
=
hook
.
config
.
droplabAjax
;
this
.
hook
=
hook
;
...
...
@@ -50,22 +65,16 @@ require('../window')(function(w){
dynamicList
.
outerHTML
=
loadingTemplate
.
outerHTML
;
}
this
.
_loadUrlData
(
config
.
endpoint
)
.
then
(
function
(
d
)
{
if
(
config
.
loadingTemplate
)
{
var
dataLoadingTemplate
=
self
.
hook
.
list
.
list
.
querySelector
(
'[data-loading-template]'
);
if
(
dataLoadingTemplate
)
{
dataLoadingTemplate
.
outerHTML
=
self
.
listTemplate
;
}
}
if
(
!
self
.
hook
.
list
.
hidden
)
{
self
.
hook
.
list
[
config
.
method
].
call
(
self
.
hook
.
list
,
d
);
}
}).
catch
(
function
(
e
)
{
throw
new
droplabAjaxException
(
e
.
message
||
e
);
});
if
(
self
.
cache
[
config
.
endpoint
])
{
self
.
_loadData
(
self
.
cache
[
config
.
endpoint
],
config
,
self
);
}
else
{
this
.
_loadUrlData
(
config
.
endpoint
)
.
then
(
function
(
d
)
{
self
.
_loadData
(
d
,
config
,
self
);
}).
catch
(
function
(
e
)
{
throw
new
droplabAjaxException
(
e
.
message
||
e
);
});
}
},
destroy
:
function
()
{
...
...
app/assets/javascripts/droplab/droplab_ajax_filter.js
View file @
bc84137d
...
...
@@ -72,32 +72,22 @@ require('../window')(function(w){
var
params
=
config
.
params
||
{};
params
[
config
.
searchKey
]
=
searchValue
;
var
self
=
this
;
this
.
_loadUrlData
(
config
.
endpoint
+
this
.
buildParams
(
params
)).
then
(
function
(
data
)
{
if
(
config
.
loadingTemplate
&&
self
.
hook
.
list
.
data
===
undefined
||
self
.
hook
.
list
.
data
.
length
===
0
)
{
const
dataLoadingTemplate
=
self
.
hook
.
list
.
list
.
querySelector
(
'[data-loading-template]'
);
if
(
dataLoadingTemplate
)
{
dataLoadingTemplate
.
outerHTML
=
self
.
listTemplate
;
}
}
if
(
!
self
.
destroyed
)
{
var
hookListChildren
=
self
.
hook
.
list
.
list
.
children
;
var
onlyDynamicList
=
hookListChildren
.
length
===
1
&&
hookListChildren
[
0
].
hasAttribute
(
'data-dynamic'
);
if
(
onlyDynamicList
&&
data
.
length
===
0
)
{
self
.
hook
.
list
.
hide
();
}
self
.
hook
.
list
.
setData
.
call
(
self
.
hook
.
list
,
data
);
}
self
.
notLoading
();
self
.
hook
.
list
.
currentIndex
=
0
;
});
self
.
cache
=
self
.
cache
||
{};
var
url
=
config
.
endpoint
+
this
.
buildParams
(
params
);
var
urlCachedData
=
self
.
cache
[
url
];
if
(
urlCachedData
)
{
self
.
_loadData
(
urlCachedData
,
config
,
self
);
}
else
{
this
.
_loadUrlData
(
url
)
.
then
(
function
(
data
)
{
self
.
_loadData
(
data
,
config
,
self
);
});
}
},
_loadUrlData
:
function
_loadUrlData
(
url
)
{
var
self
=
this
;
return
new
Promise
(
function
(
resolve
,
reject
)
{
var
xhr
=
new
XMLHttpRequest
;
xhr
.
open
(
'GET'
,
url
,
true
);
...
...
@@ -105,6 +95,7 @@ require('../window')(function(w){
if
(
xhr
.
readyState
===
XMLHttpRequest
.
DONE
)
{
if
(
xhr
.
status
===
200
)
{
var
data
=
JSON
.
parse
(
xhr
.
responseText
);
self
.
cache
[
url
]
=
data
;
return
resolve
(
data
);
}
else
{
return
reject
([
xhr
.
responseText
,
xhr
.
status
]);
...
...
@@ -115,6 +106,30 @@ require('../window')(function(w){
});
},
_loadData
:
function
_loadData
(
data
,
config
,
self
)
{
if
(
config
.
loadingTemplate
&&
self
.
hook
.
list
.
data
===
undefined
||
self
.
hook
.
list
.
data
.
length
===
0
)
{
const
dataLoadingTemplate
=
self
.
hook
.
list
.
list
.
querySelector
(
'[data-loading-template]'
);
if
(
dataLoadingTemplate
)
{
dataLoadingTemplate
.
outerHTML
=
self
.
listTemplate
;
}
}
if
(
!
self
.
destroyed
)
{
var
hookListChildren
=
self
.
hook
.
list
.
list
.
children
;
var
onlyDynamicList
=
hookListChildren
.
length
===
1
&&
hookListChildren
[
0
].
hasAttribute
(
'data-dynamic'
);
if
(
onlyDynamicList
&&
data
.
length
===
0
)
{
self
.
hook
.
list
.
hide
();
}
self
.
hook
.
list
.
setData
.
call
(
self
.
hook
.
list
,
data
);
}
self
.
notLoading
();
self
.
hook
.
list
.
currentIndex
=
0
;
},
buildParams
:
function
(
params
)
{
if
(
!
params
)
return
''
;
var
paramsArray
=
Object
.
keys
(
params
).
map
(
function
(
param
)
{
...
...
changelogs/unreleased/26844-new-search-bar-performs-a-new-request-for-each-tag.yml
0 → 100644
View file @
bc84137d
---
title
:
Add caching of droplab ajax requests
merge_request
:
8725
author
:
spec/features/issues/filtered_search/dropdown_assignee_spec.rb
View file @
bc84137d
...
...
@@ -185,4 +185,22 @@ describe 'Dropdown assignee', js: true, feature: true do
expect
(
page
).
to
have_css
(
js_dropdown_assignee
,
visible:
true
)
end
end
describe
'caching requests'
do
it
'caches requests after the first load'
do
filtered_search
.
set
(
'assignee'
)
send_keys_to_filtered_search
(
':'
)
initial_size
=
dropdown_assignee_size
expect
(
initial_size
).
to
be
>
0
new_user
=
create
(
:user
)
project
.
team
<<
[
new_user
,
:master
]
find
(
'.filtered-search-input-container .clear-search'
).
click
filtered_search
.
set
(
'assignee'
)
send_keys_to_filtered_search
(
':'
)
expect
(
dropdown_assignee_size
).
to
eq
(
initial_size
)
end
end
end
spec/features/issues/filtered_search/dropdown_author_spec.rb
View file @
bc84137d
...
...
@@ -157,4 +157,22 @@ describe 'Dropdown author', js: true, feature: true do
expect
(
page
).
to
have_css
(
js_dropdown_author
,
visible:
true
)
end
end
describe
'caching requests'
do
it
'caches requests after the first load'
do
filtered_search
.
set
(
'author'
)
send_keys_to_filtered_search
(
':'
)
initial_size
=
dropdown_author_size
expect
(
initial_size
).
to
be
>
0
new_user
=
create
(
:user
)
project
.
team
<<
[
new_user
,
:master
]
find
(
'.filtered-search-input-container .clear-search'
).
click
filtered_search
.
set
(
'author'
)
send_keys_to_filtered_search
(
':'
)
expect
(
dropdown_author_size
).
to
eq
(
initial_size
)
end
end
end
spec/features/issues/filtered_search/dropdown_label_spec.rb
View file @
bc84137d
...
...
@@ -249,4 +249,21 @@ describe 'Dropdown label', js: true, feature: true do
expect
(
page
).
to
have_css
(
js_dropdown_label
,
visible:
true
)
end
end
describe
'caching requests'
do
it
'caches requests after the first load'
do
filtered_search
.
set
(
'label'
)
send_keys_to_filtered_search
(
':'
)
initial_size
=
dropdown_label_size
expect
(
initial_size
).
to
be
>
0
create
(
:label
,
project:
project
)
find
(
'.filtered-search-input-container .clear-search'
).
click
filtered_search
.
set
(
'label'
)
send_keys_to_filtered_search
(
':'
)
expect
(
dropdown_label_size
).
to
eq
(
initial_size
)
end
end
end
spec/features/issues/filtered_search/dropdown_milestone_spec.rb
View file @
bc84137d
...
...
@@ -219,4 +219,21 @@ describe 'Dropdown milestone', js: true, feature: true do
expect
(
page
).
to
have_css
(
js_dropdown_milestone
,
visible:
true
)
end
end
describe
'caching requests'
do
it
'caches requests after the first load'
do
filtered_search
.
set
(
'milestone'
)
send_keys_to_filtered_search
(
':'
)
initial_size
=
dropdown_milestone_size
expect
(
initial_size
).
to
be
>
0
create
(
:milestone
,
project:
project
)
find
(
'.filtered-search-input-container .clear-search'
).
click
filtered_search
.
set
(
'milestone'
)
send_keys_to_filtered_search
(
':'
)
expect
(
dropdown_milestone_size
).
to
eq
(
initial_size
)
end
end
end
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