Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
402f3dfc
Commit
402f3dfc
authored
Feb 01, 2018
by
Filipa Lacerda
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'ph-axios-3' into 'master'
More conversions to axios See merge request gitlab-org/gitlab-ce!16848
parents
f5083586
fe2e8dba
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
207 additions
and
151 deletions
+207
-151
app/assets/javascripts/mini_pipeline_graph_dropdown.js
app/assets/javascripts/mini_pipeline_graph_dropdown.js
+11
-15
app/assets/javascripts/network/branch_graph.js
app/assets/javascripts/network/branch_graph.js
+8
-8
app/assets/javascripts/notes.js
app/assets/javascripts/notes.js
+15
-20
app/assets/javascripts/notifications_form.js
app/assets/javascripts/notifications_form.js
+19
-19
app/assets/javascripts/pager.js
app/assets/javascripts/pager.js
+16
-17
app/assets/javascripts/pages/admin/cohorts/usage_ping.js
app/assets/javascripts/pages/admin/cohorts/usage_ping.js
+10
-9
app/assets/javascripts/pages/dashboard/todos/index/todos.js
app/assets/javascripts/pages/dashboard/todos/index/todos.js
+15
-22
spec/javascripts/mini_pipeline_graph_dropdown_spec.js
spec/javascripts/mini_pipeline_graph_dropdown_spec.js
+47
-26
spec/javascripts/pager_spec.js
spec/javascripts/pager_spec.js
+66
-15
No files found.
app/assets/javascripts/mini_pipeline_graph_dropdown.js
View file @
402f3dfc
/* eslint-disable no-new */
import
Flash
from
'
./flash
'
;
import
flash
from
'
./flash
'
;
import
axios
from
'
./lib/utils/axios_utils
'
;
/**
* In each pipelines table we have a mini pipeline graph for each pipeline.
...
...
@@ -78,27 +79,22 @@ export default class MiniPipelineGraph {
const
button
=
e
.
relatedTarget
;
const
endpoint
=
button
.
dataset
.
stageEndpoint
;
return
$
.
ajax
({
dataType
:
'
json
'
,
type
:
'
GET
'
,
url
:
endpoint
,
beforeSend
:
()
=>
{
this
.
renderBuildsList
(
button
,
''
);
this
.
toggleLoading
(
button
);
},
success
:
(
data
)
=>
{
this
.
renderBuildsList
(
button
,
''
);
this
.
toggleLoading
(
button
);
axios
.
get
(
endpoint
)
.
then
(({
data
})
=>
{
this
.
toggleLoading
(
button
);
this
.
renderBuildsList
(
button
,
data
.
html
);
this
.
stopDropdownClickPropagation
();
}
,
error
:
()
=>
{
}
)
.
catch
(
()
=>
{
this
.
toggleLoading
(
button
);
if
(
$
(
button
).
parent
().
hasClass
(
'
open
'
))
{
$
(
button
).
dropdown
(
'
toggle
'
);
}
new
Flash
(
'
An error occurred while fetching the builds.
'
,
'
alert
'
);
},
});
flash
(
'
An error occurred while fetching the builds.
'
,
'
alert
'
);
});
}
/**
...
...
app/assets/javascripts/network/branch_graph.js
View file @
402f3dfc
/* eslint-disable func-names, space-before-function-paren, no-var, wrap-iife, quotes, comma-dangle, one-var, one-var-declaration-per-line, no-mixed-operators, no-loop-func, no-floating-decimal, consistent-return, no-unused-vars, prefer-template, prefer-arrow-callback, camelcase, max-len */
import
{
__
}
from
'
../locale
'
;
import
axios
from
'
../lib/utils/axios_utils
'
;
import
flash
from
'
../flash
'
;
import
Raphael
from
'
./raphael
'
;
export
default
(
function
()
{
...
...
@@ -26,16 +29,13 @@ export default (function() {
}
BranchGraph
.
prototype
.
load
=
function
()
{
return
$
.
ajax
({
url
:
this
.
options
.
url
,
method
:
"
get
"
,
dataType
:
"
json
"
,
success
:
$
.
proxy
(
function
(
data
)
{
axios
.
get
(
this
.
options
.
url
)
.
then
(({
data
})
=>
{
$
(
"
.loading
"
,
this
.
element
).
hide
();
this
.
prepareData
(
data
.
days
,
data
.
commits
);
return
this
.
buildGraph
();
}
,
this
)
}
);
this
.
buildGraph
();
})
.
catch
(()
=>
__
(
'
Error fetching network graph.
'
)
);
};
BranchGraph
.
prototype
.
prepareData
=
function
(
days
,
commits
)
{
...
...
app/assets/javascripts/notes.js
View file @
402f3dfc
...
...
@@ -16,6 +16,7 @@ import Autosize from 'autosize';
import
'
vendor/jquery.caret
'
;
// required by jquery.atwho
import
'
vendor/jquery.atwho
'
;
import
AjaxCache
from
'
~/lib/utils/ajax_cache
'
;
import
axios
from
'
./lib/utils/axios_utils
'
;
import
{
getLocationHash
}
from
'
./lib/utils/url_utility
'
;
import
Flash
from
'
./flash
'
;
import
CommentTypeToggle
from
'
./comment_type_toggle
'
;
...
...
@@ -252,26 +253,20 @@ export default class Notes {
return
;
}
this
.
refreshing
=
true
;
return
$
.
ajax
({
url
:
this
.
notes_url
,
headers
:
{
'
X-Last-Fetched-At
'
:
this
.
last_fetched_at
},
dataType
:
'
json
'
,
success
:
(
function
(
_this
)
{
return
function
(
data
)
{
var
notes
;
notes
=
data
.
notes
;
_this
.
last_fetched_at
=
data
.
last_fetched_at
;
_this
.
setPollingInterval
(
data
.
notes
.
length
);
return
$
.
each
(
notes
,
function
(
i
,
note
)
{
_this
.
renderNote
(
note
);
});
};
})(
this
)
}).
always
((
function
(
_this
)
{
return
function
()
{
return
_this
.
refreshing
=
false
;
};
})(
this
));
axios
.
get
(
this
.
notes_url
,
{
headers
:
{
'
X-Last-Fetched-At
'
:
this
.
last_fetched_at
,
},
}).
then
(({
data
})
=>
{
const
notes
=
data
.
notes
;
this
.
last_fetched_at
=
data
.
last_fetched_at
;
this
.
setPollingInterval
(
data
.
notes
.
length
);
$
.
each
(
notes
,
(
i
,
note
)
=>
this
.
renderNote
(
note
));
this
.
refreshing
=
false
;
}).
catch
(()
=>
{
this
.
refreshing
=
false
;
});
}
/**
...
...
app/assets/javascripts/notifications_form.js
View file @
402f3dfc
import
{
__
}
from
'
./locale
'
;
import
axios
from
'
./lib/utils/axios_utils
'
;
import
flash
from
'
./flash
'
;
export
default
class
NotificationsForm
{
constructor
()
{
this
.
toggleCheckbox
=
this
.
toggleCheckbox
.
bind
(
this
);
...
...
@@ -27,24 +31,20 @@ export default class NotificationsForm {
saveEvent
(
$checkbox
,
$parent
)
{
const
form
=
$parent
.
parents
(
'
form:first
'
);
return
$
.
ajax
({
url
:
form
.
attr
(
'
action
'
),
method
:
form
.
attr
(
'
method
'
),
dataType
:
'
json
'
,
data
:
form
.
serialize
(),
beforeSend
:
()
=>
{
this
.
showCheckboxLoadingSpinner
(
$parent
);
},
}).
done
((
data
)
=>
{
$checkbox
.
enable
();
if
(
data
.
saved
)
{
$parent
.
find
(
'
.custom-notification-event-loading
'
).
toggleClass
(
'
fa-spin fa-spinner fa-check is-done
'
);
setTimeout
(()
=>
{
$parent
.
removeClass
(
'
is-loading
'
)
.
find
(
'
.custom-notification-event-loading
'
)
.
toggleClass
(
'
fa-spin fa-spinner fa-check is-done
'
);
},
2000
);
}
});
this
.
showCheckboxLoadingSpinner
(
$parent
);
axios
[
form
.
attr
(
'
method
'
)](
form
.
attr
(
'
action
'
),
form
.
serialize
())
.
then
(({
data
})
=>
{
$checkbox
.
enable
();
if
(
data
.
saved
)
{
$parent
.
find
(
'
.custom-notification-event-loading
'
).
toggleClass
(
'
fa-spin fa-spinner fa-check is-done
'
);
setTimeout
(()
=>
{
$parent
.
removeClass
(
'
is-loading
'
)
.
find
(
'
.custom-notification-event-loading
'
)
.
toggleClass
(
'
fa-spin fa-spinner fa-check is-done
'
);
},
2000
);
}
})
.
catch
(()
=>
flash
(
__
(
'
There was an error saving your notification settings.
'
)));
}
}
app/assets/javascripts/pager.js
View file @
402f3dfc
import
{
getParameterByName
}
from
'
~/lib/utils/common_utils
'
;
import
axios
from
'
./lib/utils/axios_utils
'
;
import
{
removeParams
}
from
'
./lib/utils/url_utility
'
;
const
ENDLESS_SCROLL_BOTTOM_PX
=
400
;
...
...
@@ -22,24 +23,22 @@ export default {
getOld
()
{
this
.
loading
.
show
();
$
.
ajax
({
type
:
'
GET
'
,
url
:
this
.
url
,
data
:
`limit=
${
this
.
limit
}
&offset=
${
this
.
offset
}
`
,
dataType
:
'
json
'
,
error
:
()
=>
this
.
loading
.
hide
(),
success
:
(
data
)
=>
{
this
.
append
(
data
.
count
,
this
.
prepareData
(
data
.
html
));
this
.
callback
();
// keep loading until we've filled the viewport height
if
(
!
this
.
disable
&&
!
this
.
isScrollable
())
{
this
.
getOld
();
}
else
{
this
.
loading
.
hide
();
}
axios
.
get
(
this
.
url
,
{
params
:
{
limit
:
this
.
limit
,
offset
:
this
.
offset
,
},
});
}).
then
(({
data
})
=>
{
this
.
append
(
data
.
count
,
this
.
prepareData
(
data
.
html
));
this
.
callback
();
// keep loading until we've filled the viewport height
if
(
!
this
.
disable
&&
!
this
.
isScrollable
())
{
this
.
getOld
();
}
else
{
this
.
loading
.
hide
();
}
}).
catch
(()
=>
this
.
loading
.
hide
());
},
append
(
count
,
html
)
{
...
...
app/assets/javascripts/pages/admin/cohorts/usage_ping.js
View file @
402f3dfc
import
axios
from
'
../../../lib/utils/axios_utils
'
;
import
{
__
}
from
'
../../../locale
'
;
import
flash
from
'
../../../flash
'
;
export
default
function
UsagePing
()
{
const
usageDataUrl
=
$
(
'
.usage-data
'
).
data
(
'
endpoint
'
);
const
el
=
document
.
querySelector
(
'
.usage-data
'
);
$
.
ajax
({
type
:
'
GET
'
,
url
:
usageDataUrl
,
dataType
:
'
html
'
,
success
(
html
)
{
$
(
'
.usage-data
'
).
html
(
html
);
},
});
axios
.
get
(
el
.
dataset
.
endpoint
,
{
responseType
:
'
text
'
,
}).
then
(({
data
})
=>
{
el
.
innerHTML
=
data
;
}).
catch
(()
=>
flash
(
__
(
'
Error fetching usage ping data.
'
)));
}
app/assets/javascripts/pages/dashboard/todos/index/todos.js
View file @
402f3dfc
...
...
@@ -2,6 +2,9 @@
import
{
visitUrl
}
from
'
~/lib/utils/url_utility
'
;
import
UsersSelect
from
'
~/users_select
'
;
import
{
isMetaClick
}
from
'
~/lib/utils/common_utils
'
;
import
{
__
}
from
'
../../../../locale
'
;
import
flash
from
'
../../../../flash
'
;
import
axios
from
'
../../../../lib/utils/axios_utils
'
;
export
default
class
Todos
{
constructor
()
{
...
...
@@ -59,18 +62,12 @@ export default class Todos {
const
target
=
e
.
target
;
target
.
setAttribute
(
'
disabled
'
,
true
);
target
.
classList
.
add
(
'
disabled
'
);
$
.
ajax
({
type
:
'
POST
'
,
url
:
target
.
dataset
.
href
,
dataType
:
'
json
'
,
data
:
{
'
_method
'
:
target
.
dataset
.
method
,
},
success
:
(
data
)
=>
{
axios
[
target
.
dataset
.
method
](
target
.
dataset
.
href
)
.
then
(({
data
})
=>
{
this
.
updateRowState
(
target
);
return
this
.
updateBadges
(
data
);
},
});
this
.
updateBadges
(
data
);
}).
catch
(()
=>
flash
(
__
(
'
Error updating todo status.
'
)));
}
updateRowState
(
target
)
{
...
...
@@ -98,19 +95,15 @@ export default class Todos {
e
.
preventDefault
();
const
target
=
e
.
currentTarget
;
const
requestData
=
{
'
_method
'
:
target
.
dataset
.
method
,
ids
:
this
.
todo_ids
};
target
.
setAttribute
(
'
disabled
'
,
true
);
target
.
classList
.
add
(
'
disabled
'
);
$
.
ajax
({
type
:
'
POST
'
,
url
:
target
.
dataset
.
href
,
dataType
:
'
json
'
,
data
:
requestData
,
success
:
(
data
)
=>
{
this
.
updateAllState
(
target
,
data
);
return
this
.
updateBadges
(
data
);
},
});
axios
[
target
.
dataset
.
method
](
target
.
dataset
.
href
,
{
ids
:
this
.
todo_ids
,
}).
then
(({
data
})
=>
{
this
.
updateAllState
(
target
,
data
);
this
.
updateBadges
(
data
);
}).
catch
(()
=>
flash
(
__
(
'
Error updating status for all todos.
'
)));
}
updateAllState
(
target
,
data
)
{
...
...
spec/javascripts/mini_pipeline_graph_dropdown_spec.js
View file @
402f3dfc
/* eslint-disable no-new */
import
MockAdapter
from
'
axios-mock-adapter
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
MiniPipelineGraph
from
'
~/mini_pipeline_graph_dropdown
'
;
import
'
~/flash
'
;
import
timeoutPromise
from
'
./helpers/set_timeout_promise_helper
'
;
describe
(
'
Mini Pipeline Graph Dropdown
'
,
()
=>
{
preloadFixtures
(
'
static/mini_dropdown_graph.html.raw
'
);
...
...
@@ -27,6 +29,16 @@ describe('Mini Pipeline Graph Dropdown', () => {
});
describe
(
'
When dropdown is clicked
'
,
()
=>
{
let
mock
;
beforeEach
(()
=>
{
mock
=
new
MockAdapter
(
axios
);
});
afterEach
(()
=>
{
mock
.
restore
();
});
it
(
'
should call getBuildsList
'
,
()
=>
{
const
getBuildsListSpy
=
spyOn
(
MiniPipelineGraph
.
prototype
,
...
...
@@ -41,46 +53,55 @@ describe('Mini Pipeline Graph Dropdown', () => {
});
it
(
'
should make a request to the endpoint provided in the html
'
,
()
=>
{
const
ajaxSpy
=
spyOn
(
$
,
'
ajax
'
).
and
.
callFake
(
function
()
{});
const
ajaxSpy
=
spyOn
(
axios
,
'
get
'
).
and
.
callThrough
();
mock
.
onGet
(
'
foobar
'
).
reply
(
200
,
{
html
:
''
,
});
new
MiniPipelineGraph
({
container
:
'
.js-builds-dropdown-tests
'
}).
bindEvents
();
document
.
querySelector
(
'
.js-builds-dropdown-button
'
).
click
();
expect
(
ajaxSpy
.
calls
.
allArgs
()[
0
][
0
]
.
url
).
toEqual
(
'
foobar
'
);
expect
(
ajaxSpy
.
calls
.
allArgs
()[
0
][
0
]).
toEqual
(
'
foobar
'
);
});
it
(
'
should not close when user uses cmd/ctrl + click
'
,
()
=>
{
spyOn
(
$
,
'
ajax
'
).
and
.
callFake
(
function
(
params
)
{
params
.
success
({
html
:
`<li>
<a class="mini-pipeline-graph-dropdown-item" href="#">
<span class="ci-status-icon ci-status-icon-failed"></span>
<span class="ci-build-text">build</span>
</a>
<a class="ci-action-icon-wrapper js-ci-action-icon" href="#"></a>
</li>`
,
});
it
(
'
should not close when user uses cmd/ctrl + click
'
,
(
done
)
=>
{
mock
.
onGet
(
'
foobar
'
).
reply
(
200
,
{
html
:
`<li>
<a class="mini-pipeline-graph-dropdown-item" href="#">
<span class="ci-status-icon ci-status-icon-failed"></span>
<span class="ci-build-text">build</span>
</a>
<a class="ci-action-icon-wrapper js-ci-action-icon" href="#"></a>
</li>`
,
});
new
MiniPipelineGraph
({
container
:
'
.js-builds-dropdown-tests
'
}).
bindEvents
();
document
.
querySelector
(
'
.js-builds-dropdown-button
'
).
click
();
document
.
querySelector
(
'
a.mini-pipeline-graph-dropdown-item
'
).
click
();
expect
(
$
(
'
.js-builds-dropdown-list
'
).
is
(
'
:visible
'
)).
toEqual
(
true
);
timeoutPromise
()
.
then
(()
=>
{
document
.
querySelector
(
'
a.mini-pipeline-graph-dropdown-item
'
).
click
();
})
.
then
(
timeoutPromise
)
.
then
(()
=>
{
expect
(
$
(
'
.js-builds-dropdown-list
'
).
is
(
'
:visible
'
)).
toEqual
(
true
);
})
.
then
(
done
)
.
catch
(
done
.
fail
);
});
});
it
(
'
should close the dropdown when request returns an error
'
,
(
done
)
=>
{
spyOn
(
$
,
'
ajax
'
).
and
.
callFake
(
options
=>
options
.
error
()
);
it
(
'
should close the dropdown when request returns an error
'
,
(
done
)
=>
{
mock
.
onGet
(
'
foobar
'
).
networkError
(
);
new
MiniPipelineGraph
({
container
:
'
.js-builds-dropdown-tests
'
}).
bindEvents
();
new
MiniPipelineGraph
({
container
:
'
.js-builds-dropdown-tests
'
}).
bindEvents
();
document
.
querySelector
(
'
.js-builds-dropdown-button
'
).
click
();
document
.
querySelector
(
'
.js-builds-dropdown-button
'
).
click
();
setTimeout
(()
=>
{
expect
(
$
(
'
.js-builds-dropdown-tests .dropdown
'
).
hasClass
(
'
open
'
)).
toEqual
(
false
);
done
();
},
0
);
setTimeout
(()
=>
{
expect
(
$
(
'
.js-builds-dropdown-tests .dropdown
'
).
hasClass
(
'
open
'
)).
toEqual
(
false
);
done
();
});
});
});
});
spec/javascripts/pager_spec.js
View file @
402f3dfc
/* global fixture */
import
MockAdapter
from
'
axios-mock-adapter
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
*
as
utils
from
'
~/lib/utils/url_utility
'
;
import
Pager
from
'
~/pager
'
;
...
...
@@ -9,7 +10,6 @@ describe('pager', () => {
beforeEach
(()
=>
{
setFixtures
(
'
<div class="content_list"></div><div class="loading"></div>
'
);
spyOn
(
$
,
'
ajax
'
);
});
afterEach
(()
=>
{
...
...
@@ -47,39 +47,90 @@ describe('pager', () => {
});
describe
(
'
getOld
'
,
()
=>
{
const
urlRegex
=
/
(
.*
)
some_list
(
.*
)
$/
;
let
mock
;
function
mockSuccess
()
{
mock
.
onGet
(
urlRegex
).
reply
(
200
,
{
count
:
0
,
html
:
''
,
});
}
function
mockError
()
{
mock
.
onGet
(
urlRegex
).
networkError
();
}
beforeEach
(()
=>
{
setFixtures
(
'
<div class="content_list" data-href="/some_list"></div><div class="loading"></div>
'
);
spyOn
(
axios
,
'
get
'
).
and
.
callThrough
();
mock
=
new
MockAdapter
(
axios
);
Pager
.
init
();
});
it
(
'
shows loader while loading next page
'
,
()
=>
{
afterEach
(()
=>
{
mock
.
restore
();
});
it
(
'
shows loader while loading next page
'
,
(
done
)
=>
{
mockSuccess
();
spyOn
(
Pager
.
loading
,
'
show
'
);
Pager
.
getOld
();
expect
(
Pager
.
loading
.
show
).
toHaveBeenCalled
();
setTimeout
(()
=>
{
expect
(
Pager
.
loading
.
show
).
toHaveBeenCalled
();
done
();
});
});
it
(
'
hides loader on success
'
,
()
=>
{
spyOn
(
$
,
'
ajax
'
).
and
.
callFake
(
options
=>
options
.
success
({}));
it
(
'
hides loader on success
'
,
(
done
)
=>
{
mockSuccess
();
spyOn
(
Pager
.
loading
,
'
hide
'
);
Pager
.
getOld
();
expect
(
Pager
.
loading
.
hide
).
toHaveBeenCalled
();
setTimeout
(()
=>
{
expect
(
Pager
.
loading
.
hide
).
toHaveBeenCalled
();
done
();
});
});
it
(
'
hides loader on error
'
,
()
=>
{
spyOn
(
$
,
'
ajax
'
).
and
.
callFake
(
options
=>
options
.
error
());
it
(
'
hides loader on error
'
,
(
done
)
=>
{
mockError
();
spyOn
(
Pager
.
loading
,
'
hide
'
);
Pager
.
getOld
();
expect
(
Pager
.
loading
.
hide
).
toHaveBeenCalled
();
setTimeout
(()
=>
{
expect
(
Pager
.
loading
.
hide
).
toHaveBeenCalled
();
done
();
});
});
it
(
'
sends request to url with offset and limit params
'
,
()
=>
{
spyOn
(
$
,
'
ajax
'
);
it
(
'
sends request to url with offset and limit params
'
,
(
done
)
=>
{
Pager
.
offset
=
100
;
Pager
.
limit
=
20
;
Pager
.
getOld
();
const
[{
data
,
url
}]
=
$
.
ajax
.
calls
.
argsFor
(
0
);
expect
(
data
).
toBe
(
'
limit=20&offset=100
'
);
expect
(
url
).
toBe
(
'
/some_list
'
);
setTimeout
(()
=>
{
const
[
url
,
params
]
=
axios
.
get
.
calls
.
argsFor
(
0
);
expect
(
params
).
toEqual
({
params
:
{
limit
:
20
,
offset
:
100
,
},
});
expect
(
url
).
toBe
(
'
/some_list
'
);
done
();
});
});
});
});
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