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
0
Merge Requests
0
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
Léo-Paul Géneau
gitlab-ce
Commits
f14c5ae8
Commit
f14c5ae8
authored
Oct 25, 2016
by
Mike Greiling
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor MergeRequestTabs to es6 class syntax
parent
ac0d9b34
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
88 additions
and
91 deletions
+88
-91
app/assets/javascripts/merge_request.js
app/assets/javascripts/merge_request.js
+1
-1
app/assets/javascripts/merge_request_tabs.js.es6
app/assets/javascripts/merge_request_tabs.js.es6
+86
-89
spec/javascripts/merge_request_tabs_spec.js
spec/javascripts/merge_request_tabs_spec.js
+1
-1
No files found.
app/assets/javascripts/merge_request.js
View file @
f14c5ae8
...
@@ -40,7 +40,7 @@
...
@@ -40,7 +40,7 @@
if
(
window
.
mrTabs
)
{
if
(
window
.
mrTabs
)
{
window
.
mrTabs
.
unbindEvents
();
window
.
mrTabs
.
unbindEvents
();
}
}
window
.
mrTabs
=
new
MergeRequestTabs
(
this
.
opts
);
window
.
mrTabs
=
new
gl
.
MergeRequestTabs
(
this
.
opts
);
};
};
MergeRequest
.
prototype
.
showAllCommits
=
function
()
{
MergeRequest
.
prototype
.
showAllCommits
=
function
()
{
...
...
app/assets/javascripts/merge_request_tabs.js
→
app/assets/javascripts/merge_request_tabs.js
.es6
View file @
f14c5ae8
...
@@ -45,54 +45,49 @@
...
@@ -45,54 +45,49 @@
// </div>
// </div>
// </div>
// </div>
//
//
(
function
()
{
((global) => {
var
bind
=
function
(
fn
,
me
){
return
function
(){
return
fn
.
apply
(
me
,
arguments
);
};
};
this
.
MergeRequestTabs
=
(
function
()
{
class MergeRequestTabs {
MergeRequestTabs
.
prototype
.
diffsLoaded
=
false
;
MergeRequestTabs
.
prototype
.
buildsLoaded
=
false
;
constructor({ action, setUrl, buildsLoaded } = {}) {
this.diffsLoaded = false;
this.buildsLoaded = false;
this.pipelinesLoaded = false;
this.commitsLoaded = false;
this.fixedLayoutPref = null;
MergeRequestTabs
.
prototype
.
pipelinesLoaded
=
false
;
this.setUrl = setUrl !== undefined ? setUrl : true;
this.buildsLoaded = buildsLoaded || false;
MergeRequestTabs
.
prototype
.
commitsLoaded
=
false
;
this.setCurrentAction = this.setCurrentAction.bind(this);
this.tabShown = this.tabShown.bind(this);
this.showTab = this.showTab.bind(this);
MergeRequestTabs
.
prototype
.
fixedLayoutPref
=
null
;
function
MergeRequestTabs
(
opts
)
{
this
.
opts
=
opts
!=
null
?
opts
:
{};
this
.
opts
.
setUrl
=
this
.
opts
.
setUrl
!==
undefined
?
this
.
opts
.
setUrl
:
true
;
this
.
buildsLoaded
=
this
.
opts
.
buildsLoaded
||
false
;
this
.
setCurrentAction
=
bind
(
this
.
setCurrentAction
,
this
);
this
.
tabShown
=
bind
(
this
.
tabShown
,
this
);
this
.
showTab
=
bind
(
this
.
showTab
,
this
);
// Store the `location` object, allowing for easier stubbing in tests
// Store the `location` object, allowing for easier stubbing in tests
this
.
_location
=
location
;
this._location =
window.
location;
this.bindEvents();
this.bindEvents();
this
.
activateTab
(
this
.
opts
.
action
);
this.activateTab(action);
this.initAffix();
this.initAffix();
}
}
MergeRequestTabs
.
prototype
.
bindEvents
=
function
()
{
bindEvents
() {
$(document)
$(document)
.on('shown.bs.tab', '.merge-request-tabs a[data-toggle="tab"]', this.tabShown)
.on('shown.bs.tab', '.merge-request-tabs a[data-toggle="tab"]', this.tabShown)
.on('click', '.js-show-tab', this.showTab);
.on('click', '.js-show-tab', this.showTab);
}
}
MergeRequestTabs
.
prototype
.
unbindEvents
=
function
()
{
unbindEvents
() {
$(document)
$(document)
.off('shown.bs.tab', '.merge-request-tabs a[data-toggle="tab"]', this.tabShown)
.off('shown.bs.tab', '.merge-request-tabs a[data-toggle="tab"]', this.tabShown)
.off('click', '.js-show-tab', this.showTab);
.off('click', '.js-show-tab', this.showTab);
}
}
MergeRequestTabs
.
prototype
.
showTab
=
function
(
event
)
{
showTab
(event) {
event.preventDefault();
event.preventDefault();
return
this
.
activateTab
(
$
(
event
.
target
).
data
(
'
action
'
));
this.activateTab($(event.target).data('action'));
}
;
}
MergeRequestTabs
.
prototype
.
tabShown
=
functio
n
(
event
)
{
tabShow
n(event) {
var $target, action, navBarHeight;
var $target, action, navBarHeight;
$target = $(event.target);
$target = $(event.target);
action = $target.data('action');
action = $target.data('action');
...
@@ -124,12 +119,12 @@
...
@@ -124,12 +119,12 @@
this.expandView();
this.expandView();
this.resetViewContainer();
this.resetViewContainer();
}
}
if
(
this
.
opts
.
setUrl
)
{
if (this.setUrl) {
this.setCurrentAction(action);
this.setCurrentAction(action);
}
}
}
;
}
MergeRequestTabs
.
prototype
.
scrollToElement
=
function
(
container
)
{
scrollToElement
(container) {
var $el, navBarHeight;
var $el, navBarHeight;
if (window.location.hash) {
if (window.location.hash) {
navBarHeight = $('.navbar-gitlab').outerHeight() + $('.layout-nav').outerHeight() + document.querySelector('.js-tabs-affix').offsetHeight;
navBarHeight = $('.navbar-gitlab').outerHeight() + $('.layout-nav').outerHeight() + document.querySelector('.js-tabs-affix').offsetHeight;
...
@@ -140,16 +135,16 @@
...
@@ -140,16 +135,16 @@
});
});
}
}
}
}
}
;
}
// Activate a tab based on the current action
// Activate a tab based on the current action
MergeRequestTabs
.
prototype
.
activateTab
=
function
(
action
)
{
activateTab
(action) {
if (action === 'show') {
if (action === 'show') {
action = 'notes';
action = 'notes';
}
}
// important note: the .tab('show') method triggers 'shown.bs.tab' event itself
// important note: the .tab('show') method triggers 'shown.bs.tab' event itself
$(".merge-request-tabs a[data-action='" + action + "']").tab('show');
$(".merge-request-tabs a[data-action='" + action + "']").tab('show');
}
;
}
// Replaces the current Merge Request-specific action in the URL with a new one
// Replaces the current Merge Request-specific action in the URL with a new one
//
//
...
@@ -171,7 +166,7 @@
...
@@ -171,7 +166,7 @@
// location.pathname # => "/namespace/project/merge_requests/1/commits"
// location.pathname # => "/namespace/project/merge_requests/1/commits"
//
//
// Returns the new URL String
// Returns the new URL String
MergeRequestTabs
.
prototype
.
setCurrentAction
=
fun
ction
(
action
)
{
setCurrentA
ction(action) {
var new_state;
var new_state;
// Normalize action, just to be safe
// Normalize action, just to be safe
if (action === 'show') {
if (action === 'show') {
...
@@ -187,35 +182,37 @@
...
@@ -187,35 +182,37 @@
}
}
// Ensure parameters and hash come along for the ride
// Ensure parameters and hash come along for the ride
new_state += this._location.search + this._location.hash;
new_state += this._location.search + this._location.hash;
history
.
replaceState
({
turbolinks
:
true
,
url
:
new_state
// Replace the current history state with the new one without breaking
// Replace the current history state with the new one without breaking
// Turbolinks' history.
// Turbolinks' history.
//
//
// See https://github.com/rails/turbolinks/issues/363
// See https://github.com/rails/turbolinks/issues/363
history.replaceState({
turbolinks: true,
url: new_state
}, document.title, new_state);
}, document.title, new_state);
return new_state;
return new_state;
}
;
}
MergeRequestTabs
.
prototype
.
loadCommits
=
function
(
source
)
{
loadCommits
(source) {
if (this.commitsLoaded) {
if (this.commitsLoaded) {
return;
return;
}
}
return
this
.
_g
et
({
this.ajaxG
et({
url: source + ".json",
url: source + ".json",
success: (function(_this) {
success: (function(_this) {
return function(data) {
return function(data) {
document.querySelector("div#commits").innerHTML = data.html;
document.querySelector("div#commits").innerHTML = data.html;
gl.utils.localTimeAgo($('.js-timeago', 'div#commits'));
gl.utils.localTimeAgo($('.js-timeago', 'div#commits'));
_this.commitsLoaded = true;
_this.commitsLoaded = true;
return
_this
.
scrollToElement
(
"
#commits
"
);
_this.scrollToElement("#commits");
};
};
})(this)
})(this)
});
});
}
;
}
MergeRequestTabs
.
prototype
.
loadDiff
=
function
(
source
)
{
loadDiff
(source) {
if (this.diffsLoaded) {
if (this.diffsLoaded) {
return;
return;
}
}
...
@@ -225,7 +222,7 @@
...
@@ -225,7 +222,7 @@
var url = document.createElement('a');
var url = document.createElement('a');
url.href = source;
url.href = source;
return
this
.
_g
et
({
this.ajaxG
et({
url: (url.pathname + ".json") + this._location.search,
url: (url.pathname + ".json") + this._location.search,
success: (function(_this) {
success: (function(_this) {
return function(data) {
return function(data) {
...
@@ -248,13 +245,13 @@
...
@@ -248,13 +245,13 @@
};
};
})(this)
})(this)
});
});
}
;
}
MergeRequestTabs
.
prototype
.
loadBuilds
=
function
(
source
)
{
loadBuilds
(source) {
if (this.buildsLoaded) {
if (this.buildsLoaded) {
return;
return;
}
}
return
this
.
_g
et
({
this.ajaxG
et({
url: source + ".json",
url: source + ".json",
success: (function(_this) {
success: (function(_this) {
return function(data) {
return function(data) {
...
@@ -262,106 +259,107 @@
...
@@ -262,106 +259,107 @@
gl.utils.localTimeAgo($('.js-timeago', 'div#builds'));
gl.utils.localTimeAgo($('.js-timeago', 'div#builds'));
_this.buildsLoaded = true;
_this.buildsLoaded = true;
if (!this.pipelines) this.pipelines = new gl.Pipelines();
if (!this.pipelines) this.pipelines = new gl.Pipelines();
return
_this
.
scrollToElement
(
"
#builds
"
);
_this.scrollToElement("#builds");
};
};
})(this)
})(this)
});
});
}
;
}
MergeRequestTabs
.
prototype
.
loadPipelines
=
function
(
source
)
{
loadPipelines
(source) {
if (this.pipelinesLoaded) {
if (this.pipelinesLoaded) {
return;
return;
}
}
return
this
.
_g
et
({
this.ajaxG
et({
url: source + ".json",
url: source + ".json",
success: function(data) {
success: function(data) {
$('#pipelines').html(data.html);
$('#pipelines').html(data.html);
gl.utils.localTimeAgo($('.js-timeago', '#pipelines'));
gl.utils.localTimeAgo($('.js-timeago', '#pipelines'));
this.pipelinesLoaded = true;
this.pipelinesLoaded = true;
return
this
.
scrollToElement
(
"
#pipelines
"
);
this.scrollToElement("#pipelines");
}.bind(this)
}.bind(this)
});
});
}
;
}
// Show or hide the loading spinner
// Show or hide the loading spinner
//
//
// status - Boolean, true to show, false to hide
// status - Boolean, true to show, false to hide
MergeRequestTabs
.
prototype
.
toggleLoading
=
function
(
status
)
{
toggleLoading
(status) {
return
$
(
'
.mr-loading-status .loading
'
).
toggle
(
status
);
$('.mr-loading-status .loading').toggle(status);
}
;
}
MergeRequestTabs
.
prototype
.
_get
=
function
(
options
)
{
ajaxGet(options) {
var
defaults
;
var defaults = {
defaults
=
{
beforeSend: (function(_this) {
beforeSend: (function(_this) {
return function() {
return function() {
return
_this
.
toggleLoading
(
true
);
_this.toggleLoading(true);
};
};
})(this),
})(this),
complete: (function(_this) {
complete: (function(_this) {
return function() {
return function() {
return
_this
.
toggleLoading
(
false
);
_this.toggleLoading(false);
};
};
})(this),
})(this),
dataType: 'json',
dataType: 'json',
type: 'GET'
type: 'GET'
};
};
options = $.extend({}, defaults, options);
options = $.extend({}, defaults, options);
return
$
.
ajax
(
options
);
$.ajax(options);
}
;
}
MergeRequestTabs
.
prototype
.
diffViewType
=
function
()
{
diffViewType
() {
return $('.inline-parallel-buttons a.active').data('view-type');
return $('.inline-parallel-buttons a.active').data('view-type');
}
;
}
MergeRequestTabs
.
prototype
.
isDiffAction
=
fun
ction
(
action
)
{
isDiffA
ction(action) {
return action === 'diffs' || action === 'new/diffs'
return action === 'diffs' || action === 'new/diffs'
}
;
}
MergeRequestTabs
.
prototype
.
expandViewContainer
=
function
()
{
expandViewContainer
() {
var $wrapper = $('.content-wrapper .container-fluid');
var $wrapper = $('.content-wrapper .container-fluid');
if (this.fixedLayoutPref === null) {
if (this.fixedLayoutPref === null) {
this.fixedLayoutPref = $wrapper.hasClass('container-limited');
this.fixedLayoutPref = $wrapper.hasClass('container-limited');
}
}
$wrapper.removeClass('container-limited');
$wrapper.removeClass('container-limited');
}
;
}
MergeRequestTabs
.
prototype
.
resetViewContainer
=
function
()
{
resetViewContainer
() {
if (this.fixedLayoutPref !== null) {
if (this.fixedLayoutPref !== null) {
$('.content-wrapper .container-fluid')
$('.content-wrapper .container-fluid')
.toggleClass('container-limited', this.fixedLayoutPref);
.toggleClass('container-limited', this.fixedLayoutPref);
}
}
}
;
}
MergeRequestTabs
.
prototype
.
shrinkView
=
function
()
{
shrinkView
() {
var $gutterIcon;
var $gutterIcon;
$gutterIcon = $('.js-sidebar-toggle i:visible');
$gutterIcon = $('.js-sidebar-toggle i:visible');
return
setTimeout
(
function
()
{
// Wait until listeners are set
setTimeout(function() {
// Only when sidebar is expanded
if ($gutterIcon.is('.fa-angle-double-right')) {
if ($gutterIcon.is('.fa-angle-double-right')) {
return
$gutterIcon
.
closest
(
'
a
'
).
trigger
(
'
click
'
,
[
true
]);
$gutterIcon.closest('a').trigger('click', [true]);
}
}
// Wait until listeners are set
// Only when sidebar is expanded
}, 0);
}, 0);
}
;
}
MergeRequestTabs
.
prototype
.
expandView
=
function
()
{
// Expand the issuable sidebar unless the user explicitly collapsed it
expandView() {
var $gutterIcon;
var $gutterIcon;
if (Cookies.get('collapsed_gutter') === 'true') {
if (Cookies.get('collapsed_gutter') === 'true') {
return;
return;
}
}
$gutterIcon = $('.js-sidebar-toggle i:visible');
$gutterIcon = $('.js-sidebar-toggle i:visible');
return
setTimeout
(
function
()
{
// Wait until listeners are set
setTimeout(function() {
// Only when sidebar is collapsed
if ($gutterIcon.is('.fa-angle-double-left')) {
if ($gutterIcon.is('.fa-angle-double-left')) {
return
$gutterIcon
.
closest
(
'
a
'
).
trigger
(
'
click
'
,
[
true
]);
$gutterIcon.closest('a').trigger('click', [true]);
}
}
}, 0);
}, 0);
// Expand the issuable sidebar unless the user explicitly collapsed it
}
// Wait until listeners are set
// Only when sidebar is collapsed
};
MergeRequestTabs
.
prototype
.
initAffix
=
function
()
{
initAffix
() {
var $tabs = $('.js-tabs-affix');
var $tabs = $('.js-tabs-affix');
// Screen space on small screens is usually very sparse
// Screen space on small screens is usually very sparse
...
@@ -396,10 +394,9 @@
...
@@ -396,10 +394,9 @@
if ($tabs.hasClass('affix')) {
if ($tabs.hasClass('affix')) {
$tabs.trigger('affix.bs.affix');
$tabs.trigger('affix.bs.affix');
}
}
};
}
}
return
MergeRequestTabs
;
})()
;
global.MergeRequestTabs = MergeRequestTabs
;
})
.
call
(
this
);
})
(window.gl || (window.gl = {})
);
spec/javascripts/merge_request_tabs_spec.js
View file @
f14c5ae8
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
};
};
fixture
.
preload
(
'
merge_request_tabs.html
'
);
fixture
.
preload
(
'
merge_request_tabs.html
'
);
beforeEach
(
function
()
{
beforeEach
(
function
()
{
this
[
"
class
"
]
=
new
MergeRequestTabs
();
this
[
"
class
"
]
=
new
gl
.
MergeRequestTabs
();
return
this
.
spies
=
{
return
this
.
spies
=
{
ajax
:
spyOn
(
$
,
'
ajax
'
).
and
.
callFake
(
function
()
{}),
ajax
:
spyOn
(
$
,
'
ajax
'
).
and
.
callFake
(
function
()
{}),
history
:
spyOn
(
history
,
'
replaceState
'
).
and
.
callFake
(
function
()
{})
history
:
spyOn
(
history
,
'
replaceState
'
).
and
.
callFake
(
function
()
{})
...
...
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