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
40e5f21d
Commit
40e5f21d
authored
Dec 15, 2017
by
Phil Hughes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
EE port of ph-even-more-es-modules
parent
c1cc5e51
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
362 additions
and
370 deletions
+362
-370
app/assets/javascripts/boards/components/board_sidebar.js
app/assets/javascripts/boards/components/board_sidebar.js
+1
-1
app/assets/javascripts/dispatcher.js
app/assets/javascripts/dispatcher.js
+3
-3
app/assets/javascripts/init_issuable_sidebar.js
app/assets/javascripts/init_issuable_sidebar.js
+2
-2
app/assets/javascripts/line_highlighter.js
app/assets/javascripts/line_highlighter.js
+1
-1
app/assets/javascripts/main.js
app/assets/javascripts/main.js
+0
-2
app/assets/javascripts/merge_request.js
app/assets/javascripts/merge_request.js
+128
-132
app/assets/javascripts/repo/components/repo_preview.vue
app/assets/javascripts/repo/components/repo_preview.vue
+1
-1
app/assets/javascripts/right_sidebar.js
app/assets/javascripts/right_sidebar.js
+220
-218
app/assets/javascripts/shortcuts_issuable.js
app/assets/javascripts/shortcuts_issuable.js
+2
-2
spec/javascripts/collapsed_sidebar_todo_spec.js
spec/javascripts/collapsed_sidebar_todo_spec.js
+1
-2
spec/javascripts/line_highlighter_spec.js
spec/javascripts/line_highlighter_spec.js
+1
-2
spec/javascripts/merge_request_spec.js
spec/javascripts/merge_request_spec.js
+1
-2
spec/javascripts/right_sidebar_spec.js
spec/javascripts/right_sidebar_spec.js
+1
-2
No files found.
app/assets/javascripts/boards/components/board_sidebar.js
View file @
40e5f21d
/* eslint-disable comma-dangle, space-before-function-paren, no-new */
/* eslint-disable comma-dangle, space-before-function-paren, no-new */
/* global MilestoneSelect */
/* global MilestoneSelect */
/* global Sidebar */
import
Vue
from
'
vue
'
;
import
Vue
from
'
vue
'
;
import
weight
from
'
ee/sidebar/components/weight/weight.vue
'
;
import
weight
from
'
ee/sidebar/components/weight/weight.vue
'
;
import
Flash
from
'
../../flash
'
;
import
Flash
from
'
../../flash
'
;
import
Sidebar
from
'
../../right_sidebar
'
;
import
eventHub
from
'
../../sidebar/event_hub
'
;
import
eventHub
from
'
../../sidebar/event_hub
'
;
import
assigneeTitle
from
'
../../sidebar/components/assignees/assignee_title
'
;
import
assigneeTitle
from
'
../../sidebar/components/assignees/assignee_title
'
;
import
assignees
from
'
../../sidebar/components/assignees/assignees
'
;
import
assignees
from
'
../../sidebar/components/assignees/assignees
'
;
...
...
app/assets/javascripts/dispatcher.js
View file @
40e5f21d
...
@@ -11,7 +11,7 @@ import NewBranchForm from './new_branch_form';
...
@@ -11,7 +11,7 @@ import NewBranchForm from './new_branch_form';
/* global NotificationsDropdown */
/* global NotificationsDropdown */
import
groupAvatar
from
'
./group_avatar
'
;
import
groupAvatar
from
'
./group_avatar
'
;
import
GroupLabelSubscription
from
'
./group_label_subscription
'
;
import
GroupLabelSubscription
from
'
./group_label_subscription
'
;
/* global LineHighlighter */
import
LineHighlighter
from
'
./line_highlighter
'
;
import
BuildArtifacts
from
'
./build_artifacts
'
;
import
BuildArtifacts
from
'
./build_artifacts
'
;
import
CILintEditor
from
'
./ci_lint_editor
'
;
import
CILintEditor
from
'
./ci_lint_editor
'
;
import
groupsSelect
from
'
./groups_select
'
;
import
groupsSelect
from
'
./groups_select
'
;
...
@@ -21,7 +21,7 @@ import NamespaceSelect from './namespace_select';
...
@@ -21,7 +21,7 @@ import NamespaceSelect from './namespace_select';
import
NewCommitForm
from
'
./new_commit_form
'
;
import
NewCommitForm
from
'
./new_commit_form
'
;
import
Project
from
'
./project
'
;
import
Project
from
'
./project
'
;
import
projectAvatar
from
'
./project_avatar
'
;
import
projectAvatar
from
'
./project_avatar
'
;
/* global MergeRequest */
import
MergeRequest
from
'
./merge_request
'
;
import
Compare
from
'
./compare
'
;
import
Compare
from
'
./compare
'
;
import
initCompareAutocomplete
from
'
./compare_autocomplete
'
;
import
initCompareAutocomplete
from
'
./compare_autocomplete
'
;
/* global PathLocks */
/* global PathLocks */
...
@@ -30,7 +30,7 @@ import ProjectNew from './project_new';
...
@@ -30,7 +30,7 @@ import ProjectNew from './project_new';
import
projectImport
from
'
./project_import
'
;
import
projectImport
from
'
./project_import
'
;
import
Labels
from
'
./labels
'
;
import
Labels
from
'
./labels
'
;
import
LabelManager
from
'
./label_manager
'
;
import
LabelManager
from
'
./label_manager
'
;
/* global Sidebar */
import
Sidebar
from
'
./right_sidebar
'
;
/* global WeightSelect */
/* global WeightSelect */
/* global AdminEmailSelect */
/* global AdminEmailSelect */
...
...
app/assets/javascripts/init_issuable_sidebar.js
View file @
40e5f21d
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
/* global WeightSelect */
/* global WeightSelect */
import
LabelsSelect
from
'
./labels_select
'
;
import
LabelsSelect
from
'
./labels_select
'
;
import
IssuableContext
from
'
./issuable_context
'
;
import
IssuableContext
from
'
./issuable_context
'
;
/* global Sidebar */
import
Sidebar
from
'
./right_sidebar
'
;
import
DueDateSelectors
from
'
./due_date_select
'
;
import
DueDateSelectors
from
'
./due_date_select
'
;
...
@@ -17,5 +17,5 @@ export default () => {
...
@@ -17,5 +17,5 @@ export default () => {
new
WeightSelect
();
new
WeightSelect
();
new
IssuableContext
(
sidebarOptions
.
currentUser
);
new
IssuableContext
(
sidebarOptions
.
currentUser
);
new
DueDateSelectors
();
new
DueDateSelectors
();
window
.
sidebar
=
new
Sidebar
();
Sidebar
.
initialize
();
};
};
app/assets/javascripts/line_highlighter.js
View file @
40e5f21d
...
@@ -175,4 +175,4 @@ LineHighlighter.prototype.__setLocationHash__ = function(value) {
...
@@ -175,4 +175,4 @@ LineHighlighter.prototype.__setLocationHash__ = function(value) {
},
document
.
title
,
value
);
},
document
.
title
,
value
);
};
};
window
.
LineHighlighter
=
LineHighlighter
;
export
default
LineHighlighter
;
app/assets/javascripts/main.js
View file @
40e5f21d
...
@@ -50,7 +50,6 @@ import './layout_nav';
...
@@ -50,7 +50,6 @@ import './layout_nav';
import
LazyLoader
from
'
./lazy_loader
'
;
import
LazyLoader
from
'
./lazy_loader
'
;
import
'
./line_highlighter
'
;
import
'
./line_highlighter
'
;
import
initLogoAnimation
from
'
./logo
'
;
import
initLogoAnimation
from
'
./logo
'
;
import
'
./merge_request
'
;
import
'
./merge_request_tabs
'
;
import
'
./merge_request_tabs
'
;
import
'
./milestone_select
'
;
import
'
./milestone_select
'
;
import
'
./notes
'
;
import
'
./notes
'
;
...
@@ -61,7 +60,6 @@ import './preview_markdown';
...
@@ -61,7 +60,6 @@ import './preview_markdown';
import
'
./project_import
'
;
import
'
./project_import
'
;
import
'
./projects_dropdown
'
;
import
'
./projects_dropdown
'
;
import
'
./render_gfm
'
;
import
'
./render_gfm
'
;
import
'
./right_sidebar
'
;
import
initBreadcrumbs
from
'
./breadcrumb
'
;
import
initBreadcrumbs
from
'
./breadcrumb
'
;
// EE-only scripts
// EE-only scripts
...
...
app/assets/javascripts/merge_request.js
View file @
40e5f21d
...
@@ -7,142 +7,138 @@ import './merge_request_tabs';
...
@@ -7,142 +7,138 @@ import './merge_request_tabs';
import
IssuablesHelper
from
'
./helpers/issuables_helper
'
;
import
IssuablesHelper
from
'
./helpers/issuables_helper
'
;
import
{
addDelimiter
}
from
'
./lib/utils/text_utility
'
;
import
{
addDelimiter
}
from
'
./lib/utils/text_utility
'
;
(
function
()
{
function
MergeRequest
(
opts
)
{
this
.
MergeRequest
=
(
function
()
{
// Initialize MergeRequest behavior
function
MergeRequest
(
opts
)
{
//
// Initialize MergeRequest behavior
// Options:
//
// action - String, current controller action
// Options:
//
// action - String, current controller action
this
.
opts
=
opts
!=
null
?
opts
:
{};
//
this
.
submitNoteForm
=
this
.
submitNoteForm
.
bind
(
this
);
this
.
opts
=
opts
!=
null
?
opts
:
{};
this
.
$el
=
$
(
'
.merge-request
'
);
this
.
submitNoteForm
=
this
.
submitNoteForm
.
bind
(
this
);
this
.
$
(
'
.show-all-commits
'
).
on
(
'
click
'
,
(
function
(
_this
)
{
this
.
$el
=
$
(
'
.merge-request
'
);
return
function
()
{
this
.
$
(
'
.show-all-commits
'
).
on
(
'
click
'
,
(
function
(
_this
)
{
return
_this
.
showAllCommits
();
return
function
()
{
return
_this
.
showAllCommits
();
};
})(
this
));
this
.
initTabs
();
this
.
initMRBtnListeners
();
this
.
initCommitMessageListeners
();
this
.
closeReopenReportToggle
=
IssuablesHelper
.
initCloseReopenReport
();
if
(
$
(
"
a.btn-close
"
).
length
)
{
this
.
taskList
=
new
TaskList
({
dataType
:
'
merge_request
'
,
fieldName
:
'
description
'
,
selector
:
'
.detail-page-description
'
,
onSuccess
:
(
result
)
=>
{
document
.
querySelector
(
'
#task_status
'
).
innerText
=
result
.
task_status
;
document
.
querySelector
(
'
#task_status_short
'
).
innerText
=
result
.
task_status_short
;
}
});
}
}
// Local jQuery finder
MergeRequest
.
prototype
.
$
=
function
(
selector
)
{
return
this
.
$el
.
find
(
selector
);
};
};
})(
this
));
MergeRequest
.
prototype
.
initTabs
=
function
()
{
if
(
window
.
mrTabs
)
{
this
.
initTabs
();
window
.
mrTabs
.
unbindEvents
();
this
.
initMRBtnListeners
();
this
.
initCommitMessageListeners
();
this
.
closeReopenReportToggle
=
IssuablesHelper
.
initCloseReopenReport
();
if
(
$
(
"
a.btn-close
"
).
length
)
{
this
.
taskList
=
new
TaskList
({
dataType
:
'
merge_request
'
,
fieldName
:
'
description
'
,
selector
:
'
.detail-page-description
'
,
onSuccess
:
(
result
)
=>
{
document
.
querySelector
(
'
#task_status
'
).
innerText
=
result
.
task_status
;
document
.
querySelector
(
'
#task_status_short
'
).
innerText
=
result
.
task_status_short
;
}
}
window
.
mrTabs
=
new
gl
.
MergeRequestTabs
(
this
.
opts
);
});
};
}
}
MergeRequest
.
prototype
.
showAllCommits
=
function
()
{
this
.
$
(
'
.first-commits
'
).
remove
();
// Local jQuery finder
return
this
.
$
(
'
.all-commits
'
).
removeClass
(
'
hide
'
);
MergeRequest
.
prototype
.
$
=
function
(
selector
)
{
};
return
this
.
$el
.
find
(
selector
);
};
MergeRequest
.
prototype
.
initMRBtnListeners
=
function
()
{
var
_this
;
MergeRequest
.
prototype
.
initTabs
=
function
()
{
_this
=
this
;
if
(
window
.
mrTabs
)
{
return
$
(
'
a.btn-close, a.btn-reopen
'
).
on
(
'
click
'
,
function
(
e
)
{
window
.
mrTabs
.
unbindEvents
();
var
$this
,
shouldSubmit
;
}
$this
=
$
(
this
);
window
.
mrTabs
=
new
gl
.
MergeRequestTabs
(
this
.
opts
);
shouldSubmit
=
$this
.
hasClass
(
'
btn-comment
'
);
};
if
(
shouldSubmit
&&
$this
.
data
(
'
submitted
'
))
{
return
;
MergeRequest
.
prototype
.
showAllCommits
=
function
()
{
}
this
.
$
(
'
.first-commits
'
).
remove
();
return
this
.
$
(
'
.all-commits
'
).
removeClass
(
'
hide
'
);
if
(
this
.
closeReopenReportToggle
)
this
.
closeReopenReportToggle
.
setDisable
();
};
if
(
shouldSubmit
)
{
MergeRequest
.
prototype
.
initMRBtnListeners
=
function
()
{
if
(
$this
.
hasClass
(
'
btn-comment-and-close
'
)
||
$this
.
hasClass
(
'
btn-comment-and-reopen
'
))
{
var
_this
;
e
.
preventDefault
();
_this
=
this
;
e
.
stopImmediatePropagation
();
return
$
(
'
a.btn-close, a.btn-reopen
'
).
on
(
'
click
'
,
function
(
e
)
{
var
$this
,
shouldSubmit
;
_this
.
submitNoteForm
(
$this
.
closest
(
'
form
'
),
$this
);
$this
=
$
(
this
);
}
shouldSubmit
=
$this
.
hasClass
(
'
btn-comment
'
);
}
if
(
shouldSubmit
&&
$this
.
data
(
'
submitted
'
))
{
});
return
;
};
}
MergeRequest
.
prototype
.
submitNoteForm
=
function
(
form
,
$button
)
{
var
noteText
;
noteText
=
form
.
find
(
"
textarea.js-note-text
"
).
val
();
if
(
noteText
.
trim
().
length
>
0
)
{
form
.
submit
();
$button
.
data
(
'
submitted
'
,
true
);
return
$button
.
trigger
(
'
click
'
);
}
};
MergeRequest
.
prototype
.
initCommitMessageListeners
=
function
()
{
$
(
document
).
on
(
'
click
'
,
'
a.js-with-description-link
'
,
function
(
e
)
{
var
textarea
=
$
(
'
textarea.js-commit-message
'
);
e
.
preventDefault
();
textarea
.
val
(
textarea
.
data
(
'
messageWithDescription
'
));
if
(
this
.
closeReopenReportToggle
)
this
.
closeReopenReportToggle
.
setDisable
();
$
(
'
.js-with-description-hint
'
).
hide
();
$
(
'
.js-without-description-hint
'
).
show
();
});
$
(
document
).
on
(
'
click
'
,
'
a.js-without-description-link
'
,
function
(
e
)
{
if
(
shouldSubmit
)
{
var
textarea
=
$
(
'
textarea.js-commit-message
'
);
if
(
$this
.
hasClass
(
'
btn-comment-and-close
'
)
||
$this
.
hasClass
(
'
btn-comment-and-reopen
'
))
{
e
.
preventDefault
();
e
.
preventDefault
();
e
.
stopImmediatePropagation
();
textarea
.
val
(
textarea
.
data
(
'
messageWithoutDescription
'
));
_this
.
submitNoteForm
(
$this
.
closest
(
'
form
'
),
$this
);
$
(
'
.js-with-description-hint
'
).
show
();
$
(
'
.js-without-description-hint
'
).
hide
();
});
};
MergeRequest
.
prototype
.
updateStatusText
=
function
(
classToRemove
,
classToAdd
,
newStatusText
)
{
$
(
'
.detail-page-header .status-box
'
)
.
removeClass
(
classToRemove
)
.
addClass
(
classToAdd
)
.
find
(
'
span
'
)
.
text
(
newStatusText
);
};
MergeRequest
.
prototype
.
decreaseCounter
=
function
(
by
=
1
)
{
const
$el
=
$
(
'
.nav-links .js-merge-counter
'
);
const
count
=
Math
.
max
((
parseInt
(
$el
.
text
().
replace
(
/
[^\d]
/
,
''
),
10
)
-
by
),
0
);
$el
.
text
(
addDelimiter
(
count
));
};
MergeRequest
.
prototype
.
hideCloseButton
=
function
()
{
const
el
=
document
.
querySelector
(
'
.merge-request .js-issuable-actions
'
);
const
closeDropdownItem
=
el
.
querySelector
(
'
li.close-item
'
);
if
(
closeDropdownItem
)
{
closeDropdownItem
.
classList
.
add
(
'
hidden
'
);
// Selects the next dropdown item
el
.
querySelector
(
'
li.report-item
'
).
click
();
}
else
{
// No dropdown just hide the Close button
el
.
querySelector
(
'
.btn-close
'
).
classList
.
add
(
'
hidden
'
);
}
}
// Dropdown for mobile screen
}
el
.
querySelector
(
'
li.js-close-item
'
).
classList
.
add
(
'
hidden
'
);
});
};
};
return
MergeRequest
;
MergeRequest
.
prototype
.
submitNoteForm
=
function
(
form
,
$button
)
{
})();
var
noteText
;
}).
call
(
window
);
noteText
=
form
.
find
(
"
textarea.js-note-text
"
).
val
();
if
(
noteText
.
trim
().
length
>
0
)
{
form
.
submit
();
$button
.
data
(
'
submitted
'
,
true
);
return
$button
.
trigger
(
'
click
'
);
}
};
MergeRequest
.
prototype
.
initCommitMessageListeners
=
function
()
{
$
(
document
).
on
(
'
click
'
,
'
a.js-with-description-link
'
,
function
(
e
)
{
var
textarea
=
$
(
'
textarea.js-commit-message
'
);
e
.
preventDefault
();
textarea
.
val
(
textarea
.
data
(
'
messageWithDescription
'
));
$
(
'
.js-with-description-hint
'
).
hide
();
$
(
'
.js-without-description-hint
'
).
show
();
});
$
(
document
).
on
(
'
click
'
,
'
a.js-without-description-link
'
,
function
(
e
)
{
var
textarea
=
$
(
'
textarea.js-commit-message
'
);
e
.
preventDefault
();
textarea
.
val
(
textarea
.
data
(
'
messageWithoutDescription
'
));
$
(
'
.js-with-description-hint
'
).
show
();
$
(
'
.js-without-description-hint
'
).
hide
();
});
};
MergeRequest
.
prototype
.
updateStatusText
=
function
(
classToRemove
,
classToAdd
,
newStatusText
)
{
$
(
'
.detail-page-header .status-box
'
)
.
removeClass
(
classToRemove
)
.
addClass
(
classToAdd
)
.
find
(
'
span
'
)
.
text
(
newStatusText
);
};
MergeRequest
.
prototype
.
decreaseCounter
=
function
(
by
=
1
)
{
const
$el
=
$
(
'
.nav-links .js-merge-counter
'
);
const
count
=
Math
.
max
((
parseInt
(
$el
.
text
().
replace
(
/
[^\d]
/
,
''
),
10
)
-
by
),
0
);
$el
.
text
(
addDelimiter
(
count
));
};
MergeRequest
.
prototype
.
hideCloseButton
=
function
()
{
const
el
=
document
.
querySelector
(
'
.merge-request .js-issuable-actions
'
);
const
closeDropdownItem
=
el
.
querySelector
(
'
li.close-item
'
);
if
(
closeDropdownItem
)
{
closeDropdownItem
.
classList
.
add
(
'
hidden
'
);
// Selects the next dropdown item
el
.
querySelector
(
'
li.report-item
'
).
click
();
}
else
{
// No dropdown just hide the Close button
el
.
querySelector
(
'
.btn-close
'
).
classList
.
add
(
'
hidden
'
);
}
// Dropdown for mobile screen
el
.
querySelector
(
'
li.js-close-item
'
).
classList
.
add
(
'
hidden
'
);
};
export
default
MergeRequest
;
app/assets/javascripts/repo/components/repo_preview.vue
View file @
40e5f21d
<
script
>
<
script
>
/* global LineHighlighter */
import
{
mapGetters
}
from
'
vuex
'
;
import
{
mapGetters
}
from
'
vuex
'
;
import
LineHighlighter
from
'
../../line_highlighter
'
;
import
syntaxHighlight
from
'
../../syntax_highlight
'
;
import
syntaxHighlight
from
'
../../syntax_highlight
'
;
export
default
{
export
default
{
...
...
app/assets/javascripts/right_sidebar.js
View file @
40e5f21d
...
@@ -3,226 +3,228 @@
...
@@ -3,226 +3,228 @@
import
_
from
'
underscore
'
;
import
_
from
'
underscore
'
;
import
Cookies
from
'
js-cookie
'
;
import
Cookies
from
'
js-cookie
'
;
(
function
()
{
function
Sidebar
(
currentUser
)
{
this
.
Sidebar
=
(
function
()
{
this
.
toggleTodo
=
this
.
toggleTodo
.
bind
(
this
);
function
Sidebar
(
currentUser
)
{
this
.
sidebar
=
$
(
'
aside
'
);
this
.
toggleTodo
=
this
.
toggleTodo
.
bind
(
this
);
this
.
sidebar
=
$
(
'
aside
'
);
this
.
removeListeners
();
this
.
addEventListeners
();
this
.
removeListeners
();
}
this
.
addEventListeners
();
Sidebar
.
initialize
=
function
(
currentUser
)
{
if
(
!
this
.
instance
)
{
this
.
instance
=
new
Sidebar
(
currentUser
);
}
};
Sidebar
.
prototype
.
removeListeners
=
function
()
{
this
.
sidebar
.
off
(
'
click
'
,
'
.sidebar-collapsed-icon
'
);
this
.
sidebar
.
off
(
'
hidden.gl.dropdown
'
);
$
(
'
.dropdown
'
).
off
(
'
loading.gl.dropdown
'
);
$
(
'
.dropdown
'
).
off
(
'
loaded.gl.dropdown
'
);
$
(
document
).
off
(
'
click
'
,
'
.js-sidebar-toggle
'
);
};
Sidebar
.
prototype
.
addEventListeners
=
function
()
{
const
$document
=
$
(
document
);
this
.
sidebar
.
on
(
'
click
'
,
'
.sidebar-collapsed-icon
'
,
this
,
this
.
sidebarCollapseClicked
);
this
.
sidebar
.
on
(
'
hidden.gl.dropdown
'
,
this
,
this
.
onSidebarDropdownHidden
);
$
(
'
.dropdown
'
).
on
(
'
loading.gl.dropdown
'
,
this
.
sidebarDropdownLoading
);
$
(
'
.dropdown
'
).
on
(
'
loaded.gl.dropdown
'
,
this
.
sidebarDropdownLoaded
);
$document
.
on
(
'
click
'
,
'
.js-sidebar-toggle
'
,
this
.
sidebarToggleClicked
);
return
$
(
document
).
off
(
'
click
'
,
'
.js-issuable-todo
'
).
on
(
'
click
'
,
'
.js-issuable-todo
'
,
this
.
toggleTodo
);
};
Sidebar
.
prototype
.
sidebarToggleClicked
=
function
(
e
,
triggered
)
{
var
$allGutterToggleIcons
,
$this
,
$thisIcon
;
e
.
preventDefault
();
$this
=
$
(
this
);
$thisIcon
=
$this
.
find
(
'
i
'
);
$allGutterToggleIcons
=
$
(
'
.js-sidebar-toggle i
'
);
if
(
$thisIcon
.
hasClass
(
'
fa-angle-double-right
'
))
{
$allGutterToggleIcons
.
removeClass
(
'
fa-angle-double-right
'
).
addClass
(
'
fa-angle-double-left
'
);
$
(
'
aside.right-sidebar
'
).
removeClass
(
'
right-sidebar-expanded
'
).
addClass
(
'
right-sidebar-collapsed
'
);
$
(
'
.layout-page
'
).
removeClass
(
'
right-sidebar-expanded
'
).
addClass
(
'
right-sidebar-collapsed
'
);
}
else
{
$allGutterToggleIcons
.
removeClass
(
'
fa-angle-double-left
'
).
addClass
(
'
fa-angle-double-right
'
);
$
(
'
aside.right-sidebar
'
).
removeClass
(
'
right-sidebar-collapsed
'
).
addClass
(
'
right-sidebar-expanded
'
);
$
(
'
.layout-page
'
).
removeClass
(
'
right-sidebar-collapsed
'
).
addClass
(
'
right-sidebar-expanded
'
);
if
(
gl
.
lazyLoader
)
gl
.
lazyLoader
.
loadCheck
();
}
if
(
!
triggered
)
{
Cookies
.
set
(
"
collapsed_gutter
"
,
$
(
'
.right-sidebar
'
).
hasClass
(
'
right-sidebar-collapsed
'
));
}
};
Sidebar
.
prototype
.
toggleTodo
=
function
(
e
)
{
var
$btnText
,
$this
,
$todoLoading
,
ajaxType
,
url
;
$this
=
$
(
e
.
currentTarget
);
ajaxType
=
$this
.
attr
(
'
data-delete-path
'
)
?
'
DELETE
'
:
'
POST
'
;
if
(
$this
.
attr
(
'
data-delete-path
'
))
{
url
=
""
+
(
$this
.
attr
(
'
data-delete-path
'
));
}
else
{
url
=
""
+
(
$this
.
data
(
'
url
'
));
}
$this
.
tooltip
(
'
hide
'
);
return
$
.
ajax
({
url
:
url
,
type
:
ajaxType
,
dataType
:
'
json
'
,
data
:
{
issuable_id
:
$this
.
data
(
'
issuable-id
'
),
issuable_type
:
$this
.
data
(
'
issuable-type
'
)
},
beforeSend
:
(
function
(
_this
)
{
return
function
()
{
$
(
'
.js-issuable-todo
'
).
disable
()
.
addClass
(
'
is-loading
'
);
};
})(
this
)
}).
done
((
function
(
_this
)
{
return
function
(
data
)
{
return
_this
.
todoUpdateDone
(
data
);
};
})(
this
));
};
Sidebar
.
prototype
.
todoUpdateDone
=
function
(
data
)
{
const
deletePath
=
data
.
delete_path
?
data
.
delete_path
:
null
;
const
attrPrefix
=
deletePath
?
'
mark
'
:
'
todo
'
;
const
$todoBtns
=
$
(
'
.js-issuable-todo
'
);
$
(
document
).
trigger
(
'
todo:toggle
'
,
data
.
count
);
$todoBtns
.
each
((
i
,
el
)
=>
{
const
$el
=
$
(
el
);
const
$elText
=
$el
.
find
(
'
.js-issuable-todo-inner
'
);
$el
.
removeClass
(
'
is-loading
'
)
.
enable
()
.
attr
(
'
aria-label
'
,
$el
.
data
(
`
${
attrPrefix
}
-text`
))
.
attr
(
'
data-delete-path
'
,
deletePath
)
.
attr
(
'
title
'
,
$el
.
data
(
`
${
attrPrefix
}
-text`
));
if
(
$el
.
hasClass
(
'
has-tooltip
'
))
{
$el
.
tooltip
(
'
fixTitle
'
);
}
}
Sidebar
.
prototype
.
removeListeners
=
function
()
{
if
(
$el
.
data
(
`
${
attrPrefix
}
-icon`
))
{
this
.
sidebar
.
off
(
'
click
'
,
'
.sidebar-collapsed-icon
'
);
$elText
.
html
(
$el
.
data
(
`
${
attrPrefix
}
-icon`
));
this
.
sidebar
.
off
(
'
hidden.gl.dropdown
'
);
}
else
{
$
(
'
.dropdown
'
).
off
(
'
loading.gl.dropdown
'
);
$elText
.
text
(
$el
.
data
(
`
${
attrPrefix
}
-text`
));
$
(
'
.dropdown
'
).
off
(
'
loaded.gl.dropdown
'
);
}
$
(
document
).
off
(
'
click
'
,
'
.js-sidebar-toggle
'
);
});
};
};
Sidebar
.
prototype
.
addEventListeners
=
function
()
{
Sidebar
.
prototype
.
sidebarDropdownLoading
=
function
(
e
)
{
const
$document
=
$
(
document
);
var
$loading
,
$sidebarCollapsedIcon
,
i
,
img
;
$sidebarCollapsedIcon
=
$
(
this
).
closest
(
'
.block
'
).
find
(
'
.sidebar-collapsed-icon
'
);
this
.
sidebar
.
on
(
'
click
'
,
'
.sidebar-collapsed-icon
'
,
this
,
this
.
sidebarCollapseClicked
);
img
=
$sidebarCollapsedIcon
.
find
(
'
img
'
);
this
.
sidebar
.
on
(
'
hidden.gl.dropdown
'
,
this
,
this
.
onSidebarDropdownHidden
);
i
=
$sidebarCollapsedIcon
.
find
(
'
i
'
);
$
(
'
.dropdown
'
).
on
(
'
loading.gl.dropdown
'
,
this
.
sidebarDropdownLoading
);
$loading
=
$
(
'
<i class="fa fa-spinner fa-spin"></i>
'
);
$
(
'
.dropdown
'
).
on
(
'
loaded.gl.dropdown
'
,
this
.
sidebarDropdownLoaded
);
if
(
img
.
length
)
{
img
.
before
(
$loading
);
$document
.
on
(
'
click
'
,
'
.js-sidebar-toggle
'
,
this
.
sidebarToggleClicked
);
return
img
.
hide
();
return
$
(
document
).
off
(
'
click
'
,
'
.js-issuable-todo
'
).
on
(
'
click
'
,
'
.js-issuable-todo
'
,
this
.
toggleTodo
);
}
else
if
(
i
.
length
)
{
};
i
.
before
(
$loading
);
return
i
.
hide
();
Sidebar
.
prototype
.
sidebarToggleClicked
=
function
(
e
,
triggered
)
{
}
var
$allGutterToggleIcons
,
$this
,
$thisIcon
;
};
e
.
preventDefault
();
$this
=
$
(
this
);
Sidebar
.
prototype
.
sidebarDropdownLoaded
=
function
(
e
)
{
$thisIcon
=
$this
.
find
(
'
i
'
);
var
$sidebarCollapsedIcon
,
i
,
img
;
$allGutterToggleIcons
=
$
(
'
.js-sidebar-toggle i
'
);
$sidebarCollapsedIcon
=
$
(
this
).
closest
(
'
.block
'
).
find
(
'
.sidebar-collapsed-icon
'
);
if
(
$thisIcon
.
hasClass
(
'
fa-angle-double-right
'
))
{
img
=
$sidebarCollapsedIcon
.
find
(
'
img
'
);
$allGutterToggleIcons
.
removeClass
(
'
fa-angle-double-right
'
).
addClass
(
'
fa-angle-double-left
'
);
$sidebarCollapsedIcon
.
find
(
'
i.fa-spin
'
).
remove
();
$
(
'
aside.right-sidebar
'
).
removeClass
(
'
right-sidebar-expanded
'
).
addClass
(
'
right-sidebar-collapsed
'
);
i
=
$sidebarCollapsedIcon
.
find
(
'
i
'
);
$
(
'
.layout-page
'
).
removeClass
(
'
right-sidebar-expanded
'
).
addClass
(
'
right-sidebar-collapsed
'
);
if
(
img
.
length
)
{
}
else
{
return
img
.
show
();
$allGutterToggleIcons
.
removeClass
(
'
fa-angle-double-left
'
).
addClass
(
'
fa-angle-double-right
'
);
}
else
{
$
(
'
aside.right-sidebar
'
).
removeClass
(
'
right-sidebar-collapsed
'
).
addClass
(
'
right-sidebar-expanded
'
);
return
i
.
show
();
$
(
'
.layout-page
'
).
removeClass
(
'
right-sidebar-collapsed
'
).
addClass
(
'
right-sidebar-expanded
'
);
}
};
if
(
gl
.
lazyLoader
)
gl
.
lazyLoader
.
loadCheck
();
}
Sidebar
.
prototype
.
sidebarCollapseClicked
=
function
(
e
)
{
if
(
!
triggered
)
{
var
$block
,
sidebar
;
Cookies
.
set
(
"
collapsed_gutter
"
,
$
(
'
.right-sidebar
'
).
hasClass
(
'
right-sidebar-collapsed
'
));
if
(
$
(
e
.
currentTarget
).
hasClass
(
'
dont-change-state
'
))
{
}
return
;
};
}
sidebar
=
e
.
data
;
Sidebar
.
prototype
.
toggleTodo
=
function
(
e
)
{
e
.
preventDefault
();
var
$btnText
,
$this
,
$todoLoading
,
ajaxType
,
url
;
$block
=
$
(
this
).
closest
(
'
.block
'
);
$this
=
$
(
e
.
currentTarget
);
return
sidebar
.
openDropdown
(
$block
);
ajaxType
=
$this
.
attr
(
'
data-delete-path
'
)
?
'
DELETE
'
:
'
POST
'
;
};
if
(
$this
.
attr
(
'
data-delete-path
'
))
{
url
=
""
+
(
$this
.
attr
(
'
data-delete-path
'
));
Sidebar
.
prototype
.
openDropdown
=
function
(
blockOrName
)
{
}
else
{
var
$block
;
url
=
""
+
(
$this
.
data
(
'
url
'
));
$block
=
_
.
isString
(
blockOrName
)
?
this
.
getBlock
(
blockOrName
)
:
blockOrName
;
}
if
(
!
this
.
isOpen
())
{
this
.
setCollapseAfterUpdate
(
$block
);
$this
.
tooltip
(
'
hide
'
);
this
.
toggleSidebar
(
'
open
'
);
}
return
$
.
ajax
({
url
:
url
,
// Wait for the sidebar to trigger('click') open
type
:
ajaxType
,
// so it doesn't cause our dropdown to close preemptively
dataType
:
'
json
'
,
setTimeout
(()
=>
{
data
:
{
$block
.
find
(
'
.js-sidebar-dropdown-toggle
'
).
trigger
(
'
click
'
);
issuable_id
:
$this
.
data
(
'
issuable-id
'
),
});
issuable_type
:
$this
.
data
(
'
issuable-type
'
)
};
},
beforeSend
:
(
function
(
_this
)
{
Sidebar
.
prototype
.
setCollapseAfterUpdate
=
function
(
$block
)
{
return
function
()
{
$block
.
addClass
(
'
collapse-after-update
'
);
$
(
'
.js-issuable-todo
'
).
disable
()
return
$
(
'
.layout-page
'
).
addClass
(
'
with-overlay
'
);
.
addClass
(
'
is-loading
'
);
};
};
})(
this
)
Sidebar
.
prototype
.
onSidebarDropdownHidden
=
function
(
e
)
{
}).
done
((
function
(
_this
)
{
var
$block
,
sidebar
;
return
function
(
data
)
{
sidebar
=
e
.
data
;
return
_this
.
todoUpdateDone
(
data
);
e
.
preventDefault
();
};
$block
=
$
(
e
.
target
).
closest
(
'
.block
'
);
})(
this
));
return
sidebar
.
sidebarDropdownHidden
(
$block
);
};
};
Sidebar
.
prototype
.
todoUpdateDone
=
function
(
data
)
{
Sidebar
.
prototype
.
sidebarDropdownHidden
=
function
(
$block
)
{
const
deletePath
=
data
.
delete_path
?
data
.
delete_path
:
null
;
if
(
$block
.
hasClass
(
'
collapse-after-update
'
))
{
const
attrPrefix
=
deletePath
?
'
mark
'
:
'
todo
'
;
$block
.
removeClass
(
'
collapse-after-update
'
);
const
$todoBtns
=
$
(
'
.js-issuable-todo
'
);
$
(
'
.layout-page
'
).
removeClass
(
'
with-overlay
'
);
return
this
.
toggleSidebar
(
'
hide
'
);
$
(
document
).
trigger
(
'
todo:toggle
'
,
data
.
count
);
}
};
$todoBtns
.
each
((
i
,
el
)
=>
{
const
$el
=
$
(
el
);
Sidebar
.
prototype
.
triggerOpenSidebar
=
function
()
{
const
$elText
=
$el
.
find
(
'
.js-issuable-todo-inner
'
);
return
this
.
sidebar
.
find
(
'
.js-sidebar-toggle
'
).
trigger
(
'
click
'
);
};
$el
.
removeClass
(
'
is-loading
'
)
.
enable
()
Sidebar
.
prototype
.
toggleSidebar
=
function
(
action
)
{
.
attr
(
'
aria-label
'
,
$el
.
data
(
`
${
attrPrefix
}
-text`
))
if
(
action
==
null
)
{
.
attr
(
'
data-delete-path
'
,
deletePath
)
action
=
'
toggle
'
;
.
attr
(
'
title
'
,
$el
.
data
(
`
${
attrPrefix
}
-text`
));
}
if
(
action
===
'
toggle
'
)
{
if
(
$el
.
hasClass
(
'
has-tooltip
'
))
{
this
.
triggerOpenSidebar
();
$el
.
tooltip
(
'
fixTitle
'
);
}
}
if
(
action
===
'
open
'
)
{
if
(
!
this
.
isOpen
())
{
if
(
$el
.
data
(
`
${
attrPrefix
}
-icon`
))
{
this
.
triggerOpenSidebar
();
$elText
.
html
(
$el
.
data
(
`
${
attrPrefix
}
-icon`
));
}
}
else
{
}
$elText
.
text
(
$el
.
data
(
`
${
attrPrefix
}
-text`
));
if
(
action
===
'
hide
'
)
{
}
if
(
this
.
isOpen
())
{
});
return
this
.
triggerOpenSidebar
();
};
}
}
Sidebar
.
prototype
.
sidebarDropdownLoading
=
function
(
e
)
{
};
var
$loading
,
$sidebarCollapsedIcon
,
i
,
img
;
$sidebarCollapsedIcon
=
$
(
this
).
closest
(
'
.block
'
).
find
(
'
.sidebar-collapsed-icon
'
);
img
=
$sidebarCollapsedIcon
.
find
(
'
img
'
);
i
=
$sidebarCollapsedIcon
.
find
(
'
i
'
);
$loading
=
$
(
'
<i class="fa fa-spinner fa-spin"></i>
'
);
if
(
img
.
length
)
{
img
.
before
(
$loading
);
return
img
.
hide
();
}
else
if
(
i
.
length
)
{
i
.
before
(
$loading
);
return
i
.
hide
();
}
};
Sidebar
.
prototype
.
sidebarDropdownLoaded
=
function
(
e
)
{
var
$sidebarCollapsedIcon
,
i
,
img
;
$sidebarCollapsedIcon
=
$
(
this
).
closest
(
'
.block
'
).
find
(
'
.sidebar-collapsed-icon
'
);
img
=
$sidebarCollapsedIcon
.
find
(
'
img
'
);
$sidebarCollapsedIcon
.
find
(
'
i.fa-spin
'
).
remove
();
i
=
$sidebarCollapsedIcon
.
find
(
'
i
'
);
if
(
img
.
length
)
{
return
img
.
show
();
}
else
{
return
i
.
show
();
}
};
Sidebar
.
prototype
.
sidebarCollapseClicked
=
function
(
e
)
{
var
$block
,
sidebar
;
if
(
$
(
e
.
currentTarget
).
hasClass
(
'
dont-change-state
'
))
{
return
;
}
sidebar
=
e
.
data
;
e
.
preventDefault
();
$block
=
$
(
this
).
closest
(
'
.block
'
);
return
sidebar
.
openDropdown
(
$block
);
};
Sidebar
.
prototype
.
openDropdown
=
function
(
blockOrName
)
{
var
$block
;
$block
=
_
.
isString
(
blockOrName
)
?
this
.
getBlock
(
blockOrName
)
:
blockOrName
;
if
(
!
this
.
isOpen
())
{
this
.
setCollapseAfterUpdate
(
$block
);
this
.
toggleSidebar
(
'
open
'
);
}
// Wait for the sidebar to trigger('click') open
// so it doesn't cause our dropdown to close preemptively
setTimeout
(()
=>
{
$block
.
find
(
'
.js-sidebar-dropdown-toggle
'
).
trigger
(
'
click
'
);
});
};
Sidebar
.
prototype
.
setCollapseAfterUpdate
=
function
(
$block
)
{
$block
.
addClass
(
'
collapse-after-update
'
);
return
$
(
'
.layout-page
'
).
addClass
(
'
with-overlay
'
);
};
Sidebar
.
prototype
.
onSidebarDropdownHidden
=
function
(
e
)
{
var
$block
,
sidebar
;
sidebar
=
e
.
data
;
e
.
preventDefault
();
$block
=
$
(
e
.
target
).
closest
(
'
.block
'
);
return
sidebar
.
sidebarDropdownHidden
(
$block
);
};
Sidebar
.
prototype
.
sidebarDropdownHidden
=
function
(
$block
)
{
if
(
$block
.
hasClass
(
'
collapse-after-update
'
))
{
$block
.
removeClass
(
'
collapse-after-update
'
);
$
(
'
.layout-page
'
).
removeClass
(
'
with-overlay
'
);
return
this
.
toggleSidebar
(
'
hide
'
);
}
};
Sidebar
.
prototype
.
triggerOpenSidebar
=
function
()
{
return
this
.
sidebar
.
find
(
'
.js-sidebar-toggle
'
).
trigger
(
'
click
'
);
};
Sidebar
.
prototype
.
toggleSidebar
=
function
(
action
)
{
if
(
action
==
null
)
{
action
=
'
toggle
'
;
}
if
(
action
===
'
toggle
'
)
{
this
.
triggerOpenSidebar
();
}
if
(
action
===
'
open
'
)
{
if
(
!
this
.
isOpen
())
{
this
.
triggerOpenSidebar
();
}
}
if
(
action
===
'
hide
'
)
{
if
(
this
.
isOpen
())
{
return
this
.
triggerOpenSidebar
();
}
}
};
Sidebar
.
prototype
.
isOpen
=
function
()
{
Sidebar
.
prototype
.
isOpen
=
function
()
{
return
this
.
sidebar
.
is
(
'
.right-sidebar-expanded
'
);
return
this
.
sidebar
.
is
(
'
.right-sidebar-expanded
'
);
};
};
Sidebar
.
prototype
.
getBlock
=
function
(
name
)
{
Sidebar
.
prototype
.
getBlock
=
function
(
name
)
{
return
this
.
sidebar
.
find
(
"
.block.
"
+
name
);
return
this
.
sidebar
.
find
(
"
.block.
"
+
name
);
};
};
return
Sidebar
;
export
default
Sidebar
;
})();
}).
call
(
window
);
app/assets/javascripts/shortcuts_issuable.js
View file @
40e5f21d
/* global Mousetrap */
/* global Mousetrap */
/* global sidebar */
import
_
from
'
underscore
'
;
import
_
from
'
underscore
'
;
import
'
mousetrap
'
;
import
'
mousetrap
'
;
import
Sidebar
from
'
./right_sidebar
'
;
import
ShortcutsNavigation
from
'
./shortcuts_navigation
'
;
import
ShortcutsNavigation
from
'
./shortcuts_navigation
'
;
import
{
CopyAsGFM
}
from
'
./behaviors/copy_as_gfm
'
;
import
{
CopyAsGFM
}
from
'
./behaviors/copy_as_gfm
'
;
...
@@ -69,7 +69,7 @@ export default class ShortcutsIssuable extends ShortcutsNavigation {
...
@@ -69,7 +69,7 @@ export default class ShortcutsIssuable extends ShortcutsNavigation {
}
}
static
openSidebarDropdown
(
name
)
{
static
openSidebarDropdown
(
name
)
{
sidebar
.
openDropdown
(
name
);
Sidebar
.
instance
.
openDropdown
(
name
);
return
false
;
return
false
;
}
}
}
}
spec/javascripts/collapsed_sidebar_todo_spec.js
View file @
40e5f21d
/* global Sidebar */
/* eslint-disable no-new */
/* eslint-disable no-new */
import
_
from
'
underscore
'
;
import
_
from
'
underscore
'
;
import
'
~/right_sidebar
'
;
import
Sidebar
from
'
~/right_sidebar
'
;
describe
(
'
Issuable right sidebar collapsed todo toggle
'
,
()
=>
{
describe
(
'
Issuable right sidebar collapsed todo toggle
'
,
()
=>
{
const
fixtureName
=
'
issues/open-issue.html.raw
'
;
const
fixtureName
=
'
issues/open-issue.html.raw
'
;
...
...
spec/javascripts/line_highlighter_spec.js
View file @
40e5f21d
/* eslint-disable space-before-function-paren, no-var, no-param-reassign, quotes, prefer-template, no-else-return, new-cap, dot-notation, no-return-assign, comma-dangle, no-new, one-var, one-var-declaration-per-line, jasmine/no-spec-dupes, no-underscore-dangle, max-len */
/* eslint-disable space-before-function-paren, no-var, no-param-reassign, quotes, prefer-template, no-else-return, new-cap, dot-notation, no-return-assign, comma-dangle, no-new, one-var, one-var-declaration-per-line, jasmine/no-spec-dupes, no-underscore-dangle, max-len */
/* global LineHighlighter */
import
'
~/line_highlighter
'
;
import
LineHighlighter
from
'
~/line_highlighter
'
;
(
function
()
{
(
function
()
{
describe
(
'
LineHighlighter
'
,
function
()
{
describe
(
'
LineHighlighter
'
,
function
()
{
...
...
spec/javascripts/merge_request_spec.js
View file @
40e5f21d
/* eslint-disable space-before-function-paren, no-return-assign */
/* eslint-disable space-before-function-paren, no-return-assign */
/* global MergeRequest */
import
'
~/merge_request
'
;
import
MergeRequest
from
'
~/merge_request
'
;
import
CloseReopenReportToggle
from
'
~/close_reopen_report_toggle
'
;
import
CloseReopenReportToggle
from
'
~/close_reopen_report_toggle
'
;
import
IssuablesHelper
from
'
~/helpers/issuables_helper
'
;
import
IssuablesHelper
from
'
~/helpers/issuables_helper
'
;
...
...
spec/javascripts/right_sidebar_spec.js
View file @
40e5f21d
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, new-parens, no-return-assign, new-cap, vars-on-top, max-len */
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, new-parens, no-return-assign, new-cap, vars-on-top, max-len */
/* global Sidebar */
import
'
~/commons/bootstrap
'
;
import
'
~/commons/bootstrap
'
;
import
'
~/right_sidebar
'
;
import
Sidebar
from
'
~/right_sidebar
'
;
(
function
()
{
(
function
()
{
var
$aside
,
$icon
,
$labelsIcon
,
$page
,
$toggle
,
assertSidebarState
;
var
$aside
,
$icon
,
$labelsIcon
,
$page
,
$toggle
,
assertSidebarState
;
...
...
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