Merge branch 'mr-ui-update' into 'master'
Updated UI for new merge request Closes #2540 ![Screen_Shot_2016-03-29_at_12.53.18](/uploads/426e603675171f0dc4e0af83c7762eba/Screen_Shot_2016-03-29_at_12.53.18.png) ![Screen_Shot_2016-03-29_at_12.53.13](/uploads/645ad7955acfb9f7693245fcc048ee49/Screen_Shot_2016-03-29_at_12.53.13.png) See merge request !3228
This commit is contained in:
commit
69a8bf367c
|
@ -0,0 +1,67 @@
|
||||||
|
class @Compare
|
||||||
|
constructor: (@opts) ->
|
||||||
|
@source_loading = $ ".js-source-loading"
|
||||||
|
@target_loading = $ ".js-target-loading"
|
||||||
|
|
||||||
|
$('.js-compare-dropdown').each (i, dropdown) =>
|
||||||
|
$dropdown = $(dropdown)
|
||||||
|
|
||||||
|
$dropdown.glDropdown(
|
||||||
|
selectable: true
|
||||||
|
fieldName: $dropdown.data 'field-name'
|
||||||
|
filterable: true
|
||||||
|
id: (obj, $el) ->
|
||||||
|
$el.data 'id'
|
||||||
|
toggleLabel: (obj, $el) ->
|
||||||
|
$el.text().trim()
|
||||||
|
clicked: (e, el) =>
|
||||||
|
if $dropdown.is '.js-target-branch'
|
||||||
|
@getTargetHtml()
|
||||||
|
else if $dropdown.is '.js-source-branch'
|
||||||
|
@getSourceHtml()
|
||||||
|
else if $dropdown.is '.js-target-project'
|
||||||
|
@getTargetProject()
|
||||||
|
)
|
||||||
|
|
||||||
|
@initialState()
|
||||||
|
|
||||||
|
initialState: ->
|
||||||
|
@getSourceHtml()
|
||||||
|
@getTargetHtml()
|
||||||
|
|
||||||
|
getTargetProject: ->
|
||||||
|
$.ajax(
|
||||||
|
url: @opts.targetProjectUrl
|
||||||
|
data:
|
||||||
|
target_project_id: $("input[name='merge_request[target_project_id]']").val()
|
||||||
|
beforeSend: ->
|
||||||
|
$('.mr_target_commit').empty()
|
||||||
|
success: (html) ->
|
||||||
|
$('.js-target-branch-dropdown .dropdown-content').html html
|
||||||
|
)
|
||||||
|
|
||||||
|
getSourceHtml: ->
|
||||||
|
@sendAjax(@opts.sourceBranchUrl, @source_loading, '.mr_source_commit',
|
||||||
|
ref: $("input[name='merge_request[source_branch]']").val()
|
||||||
|
)
|
||||||
|
|
||||||
|
getTargetHtml: ->
|
||||||
|
@sendAjax(@opts.targetBranchUrl, @target_loading, '.mr_target_commit',
|
||||||
|
target_project_id: $("input[name='merge_request[target_project_id]']").val()
|
||||||
|
ref: $("input[name='merge_request[target_branch]']").val()
|
||||||
|
)
|
||||||
|
|
||||||
|
sendAjax: (url, loading, target, data) ->
|
||||||
|
$target = $(target)
|
||||||
|
|
||||||
|
$.ajax(
|
||||||
|
url: url
|
||||||
|
data: data
|
||||||
|
beforeSend: ->
|
||||||
|
loading.show()
|
||||||
|
$target.empty()
|
||||||
|
success: (html) ->
|
||||||
|
loading.hide()
|
||||||
|
$target.html html
|
||||||
|
$('.js-timeago', $target).timeago()
|
||||||
|
)
|
|
@ -57,14 +57,30 @@ class GitLabDropdownFilter
|
||||||
|
|
||||||
filter: (search_text) ->
|
filter: (search_text) ->
|
||||||
data = @options.data()
|
data = @options.data()
|
||||||
results = data
|
|
||||||
|
|
||||||
if search_text isnt ""
|
if data?
|
||||||
results = fuzzaldrinPlus.filter(data, search_text,
|
results = data
|
||||||
key: @options.keys
|
|
||||||
)
|
|
||||||
|
|
||||||
@options.callback results
|
if search_text isnt ''
|
||||||
|
results = fuzzaldrinPlus.filter(data, search_text,
|
||||||
|
key: @options.keys
|
||||||
|
)
|
||||||
|
|
||||||
|
@options.callback results
|
||||||
|
else
|
||||||
|
elements = @options.elements()
|
||||||
|
|
||||||
|
if search_text
|
||||||
|
elements.each ->
|
||||||
|
$el = $(@)
|
||||||
|
matches = fuzzaldrinPlus.match($el.text().trim(), search_text)
|
||||||
|
|
||||||
|
if matches.length
|
||||||
|
$el.show()
|
||||||
|
else
|
||||||
|
$el.hide()
|
||||||
|
else
|
||||||
|
elements.show()
|
||||||
|
|
||||||
class GitLabDropdownRemote
|
class GitLabDropdownRemote
|
||||||
constructor: (@dataEndpoint, @options) ->
|
constructor: (@dataEndpoint, @options) ->
|
||||||
|
@ -123,7 +139,7 @@ class GitLabDropdown
|
||||||
if _.isString(@filterInput)
|
if _.isString(@filterInput)
|
||||||
@filterInput = @getElement(@filterInput)
|
@filterInput = @getElement(@filterInput)
|
||||||
|
|
||||||
search_fields = if @options.search then @options.search.fields else [];
|
searchFields = if @options.search then @options.search.fields else [];
|
||||||
|
|
||||||
if @options.data
|
if @options.data
|
||||||
# If data is an array
|
# If data is an array
|
||||||
|
@ -147,7 +163,14 @@ class GitLabDropdown
|
||||||
filterInputBlur: @filterInputBlur
|
filterInputBlur: @filterInputBlur
|
||||||
remote: @options.filterRemote
|
remote: @options.filterRemote
|
||||||
query: @options.data
|
query: @options.data
|
||||||
keys: @options.search.fields
|
keys: searchFields
|
||||||
|
elements: =>
|
||||||
|
selector = '.dropdown-content li:not(.divider)'
|
||||||
|
|
||||||
|
if @dropdown.find('.dropdown-toggle-page').length
|
||||||
|
selector = ".dropdown-page-one #{selector}"
|
||||||
|
|
||||||
|
return $(selector)
|
||||||
data: =>
|
data: =>
|
||||||
return @fullData
|
return @fullData
|
||||||
callback: (data) =>
|
callback: (data) =>
|
||||||
|
@ -376,7 +399,7 @@ class GitLabDropdown
|
||||||
|
|
||||||
# Toggle the dropdown label
|
# Toggle the dropdown label
|
||||||
if @options.toggleLabel
|
if @options.toggleLabel
|
||||||
$(@el).find(".dropdown-toggle-text").text @options.toggleLabel(selectedObject)
|
$(@el).find(".dropdown-toggle-text").text @options.toggleLabel(selectedObject, el)
|
||||||
if value?
|
if value?
|
||||||
if !field.length and fieldName
|
if !field.length and fieldName
|
||||||
# Create hidden input for form
|
# Create hidden input for form
|
||||||
|
|
|
@ -248,7 +248,7 @@
|
||||||
|
|
||||||
.dropdown-title {
|
.dropdown-title {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 0 0 15px;
|
padding: 0 25px 15px;
|
||||||
margin: 0 10px 10px;
|
margin: 0 10px 10px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
@ -275,7 +275,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu-close {
|
.dropdown-menu-close {
|
||||||
right: 7px;
|
right: 5px;
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
top: -1px;
|
top: -1px;
|
||||||
|
|
|
@ -47,6 +47,7 @@ li.commit {
|
||||||
|
|
||||||
.commit_short_id {
|
.commit_short_id {
|
||||||
min-width: 65px;
|
min-width: 65px;
|
||||||
|
color: $gl-dark-link-color;
|
||||||
font-family: $monospace_font;
|
font-family: $monospace_font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,6 +89,10 @@ li.commit {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $gl-dark-link-color;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.commit-row-info {
|
.commit-row-info {
|
||||||
|
|
|
@ -123,6 +123,8 @@
|
||||||
|
|
||||||
.mr_source_commit,
|
.mr_source_commit,
|
||||||
.mr_target_commit {
|
.mr_target_commit {
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
.commit {
|
.commit {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 2px 0;
|
padding: 2px 0;
|
||||||
|
@ -174,10 +176,6 @@
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.merge-request-form .select2-container {
|
|
||||||
width: 250px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#modal_merge_info .modal-dialog {
|
#modal_merge_info .modal-dialog {
|
||||||
width: 600px;
|
width: 600px;
|
||||||
|
|
||||||
|
@ -200,3 +198,76 @@
|
||||||
overflow-x: scroll;
|
overflow-x: scroll;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.panel-new-merge-request {
|
||||||
|
.panel-heading {
|
||||||
|
padding: 5px 10px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel-body {
|
||||||
|
padding: 10px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel-footer {
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.commit {
|
||||||
|
.commit-row-title {
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.commit-row-info {
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-clipboard {
|
||||||
|
margin-right: 5px;
|
||||||
|
padding: 0;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ci-status-link {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.merge-request-select {
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: $screen-sm-min) {
|
||||||
|
float: left;
|
||||||
|
width: 50%;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu-toggle {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
left: 5px;
|
||||||
|
right: 5px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.issuable-form-select-holder {
|
||||||
|
display: inline-block;
|
||||||
|
width: 250px;
|
||||||
|
}
|
||||||
|
|
|
@ -207,20 +207,20 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
#This is always source
|
#This is always source
|
||||||
@source_project = @merge_request.nil? ? @project : @merge_request.source_project
|
@source_project = @merge_request.nil? ? @project : @merge_request.source_project
|
||||||
@commit = @repository.commit(params[:ref]) if params[:ref].present?
|
@commit = @repository.commit(params[:ref]) if params[:ref].present?
|
||||||
|
render layout: false
|
||||||
end
|
end
|
||||||
|
|
||||||
def branch_to
|
def branch_to
|
||||||
@target_project = selected_target_project
|
@target_project = selected_target_project
|
||||||
@commit = @target_project.commit(params[:ref]) if params[:ref].present?
|
@commit = @target_project.commit(params[:ref]) if params[:ref].present?
|
||||||
|
render layout: false
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_branches
|
def update_branches
|
||||||
@target_project = selected_target_project
|
@target_project = selected_target_project
|
||||||
@target_branches = @target_project.repository.branch_names
|
@target_branches = @target_project.repository.branch_names
|
||||||
|
|
||||||
respond_to do |format|
|
render layout: false
|
||||||
format.js
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def ci_status
|
def ci_status
|
||||||
|
|
|
@ -28,7 +28,7 @@ module CommitsHelper
|
||||||
|
|
||||||
def commit_to_html(commit, project, inline = true)
|
def commit_to_html(commit, project, inline = true)
|
||||||
template = inline ? "inline_commit" : "commit"
|
template = inline ? "inline_commit" : "commit"
|
||||||
escape_javascript(render "projects/commits/#{template}", commit: commit, project: project) unless commit.nil?
|
render "projects/commits/#{template}", commit: commit, project: project unless commit.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Breadcrumb links for a Project and, if applicable, a tree path
|
# Breadcrumb links for a Project and, if applicable, a tree path
|
||||||
|
@ -117,7 +117,7 @@ module CommitsHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
link_to(
|
link_to(
|
||||||
"Browse Files »",
|
"Browse Files",
|
||||||
namespace_project_tree_path(project.namespace, project, commit),
|
namespace_project_tree_path(project.namespace, project, commit),
|
||||||
class: "pull-right"
|
class: "pull-right"
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,24 +19,17 @@
|
||||||
.pull-right
|
.pull-right
|
||||||
- if ci_commit
|
- if ci_commit
|
||||||
= render_ci_status(ci_commit)
|
= render_ci_status(ci_commit)
|
||||||
|
|
||||||
= clipboard_button(clipboard_text: commit.id)
|
= clipboard_button(clipboard_text: commit.id)
|
||||||
= link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit_short_id"
|
= link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit_short_id"
|
||||||
|
|
||||||
.notes_count
|
|
||||||
- if note_count > 0
|
|
||||||
%span.light
|
|
||||||
%i.fa.fa-comments
|
|
||||||
= note_count
|
|
||||||
|
|
||||||
- if commit.description?
|
- if commit.description?
|
||||||
.commit-row-description.js-toggle-content
|
.commit-row-description.js-toggle-content
|
||||||
%pre
|
%pre
|
||||||
= preserve(markdown(escape_once(commit.description), pipeline: :single_line))
|
= preserve(markdown(escape_once(commit.description), pipeline: :single_line))
|
||||||
|
|
||||||
.commit-row-info
|
.commit-row-info
|
||||||
|
by
|
||||||
= commit_author_link(commit, avatar: true, size: 24)
|
= commit_author_link(commit, avatar: true, size: 24)
|
||||||
authored
|
|
||||||
.committed_ago
|
.committed_ago
|
||||||
#{time_ago_with_tooltip(commit.committed_date, skip_js: true)}
|
#{time_ago_with_tooltip(commit.committed_date, skip_js: true)}
|
||||||
= link_to_browse_code(project, commit)
|
= link_to_browse_code(project, commit)
|
||||||
|
|
|
@ -5,27 +5,71 @@
|
||||||
.hide.alert.alert-danger.mr-compare-errors
|
.hide.alert.alert-danger.mr-compare-errors
|
||||||
.merge-request-branches.row
|
.merge-request-branches.row
|
||||||
.col-md-6
|
.col-md-6
|
||||||
.panel.panel-default
|
.panel.panel-default.panel-new-merge-request
|
||||||
.panel-heading
|
.panel-heading
|
||||||
%strong Source branch
|
Source branch
|
||||||
.panel-body
|
.panel-body.clearfix
|
||||||
= f.select(:source_project_id, [[@merge_request.source_project_path,@merge_request.source_project.id]] , {}, { class: 'source_project select2 span3', disabled: @merge_request.persisted?, required: true })
|
.merge-request-select.dropdown
|
||||||
|
= f.hidden_field :source_project_id
|
||||||
= f.select(:source_branch, @merge_request.source_branches, { include_blank: true }, { class: 'source_branch select2 span2', required: true, data: { placeholder: "Select source branch" } })
|
= dropdown_toggle @merge_request.source_project_path, { toggle: "dropdown", field_name: "#{f.object_name}[source_project_id]", disabled: @merge_request.persisted? }, { toggle_class: "js-compare-dropdown js-source-project" }
|
||||||
|
.dropdown-menu.dropdown-menu-selectable.dropdown-source-project
|
||||||
|
= dropdown_title("Select source project")
|
||||||
|
= dropdown_filter("Search projects")
|
||||||
|
= dropdown_content do
|
||||||
|
- is_active = f.object.source_project_id == @merge_request.source_project.id
|
||||||
|
%ul
|
||||||
|
%li
|
||||||
|
%a{ href: "#", class: "#{("is-active" if is_active)}", data: { id: @merge_request.source_project.id } }
|
||||||
|
= @merge_request.source_project_path
|
||||||
|
.merge-request-select.dropdown
|
||||||
|
= f.hidden_field :source_branch
|
||||||
|
= dropdown_toggle "Select source branch", { toggle: "dropdown", field_name: "#{f.object_name}[source_branch]" }, { toggle_class: "js-compare-dropdown js-source-branch" }
|
||||||
|
.dropdown-menu.dropdown-menu-selectable.dropdown-source-branch
|
||||||
|
= dropdown_title("Select source branch")
|
||||||
|
= dropdown_filter("Search branches")
|
||||||
|
= dropdown_content do
|
||||||
|
%ul
|
||||||
|
- @merge_request.source_branches.each do |branch|
|
||||||
|
%li
|
||||||
|
%a{ href: "#", class: "#{("is-active" if f.object.source_branch == branch)}", data: { id: branch } }
|
||||||
|
= branch
|
||||||
.panel-footer
|
.panel-footer
|
||||||
.mr_source_commit
|
= icon('spinner spin', class: 'js-source-loading')
|
||||||
|
%ul.list-unstyled.mr_source_commit
|
||||||
|
|
||||||
.col-md-6
|
.col-md-6
|
||||||
.panel.panel-default
|
.panel.panel-default.panel-new-merge-request
|
||||||
.panel-heading
|
.panel-heading
|
||||||
%strong Target branch
|
Target branch
|
||||||
.panel-body
|
.panel-body.clearfix
|
||||||
- projects = @project.forked_from_project.nil? ? [@project] : [@project, @project.forked_from_project]
|
- projects = @project.forked_from_project.nil? ? [@project] : [@project, @project.forked_from_project]
|
||||||
= f.select(:target_project_id, options_from_collection_for_select(projects, 'id', 'path_with_namespace', f.object.target_project_id), {}, { class: 'target_project select2 span3', disabled: @merge_request.persisted?, required: true })
|
.merge-request-select.dropdown
|
||||||
|
= f.hidden_field :target_project_id
|
||||||
= f.select(:target_branch, @merge_request.target_branches, { include_blank: true }, { class: 'target_branch select2 span2', required: true, data: { placeholder: "Select target branch" } })
|
= dropdown_toggle f.object.target_project.path_with_namespace, { toggle: "dropdown", field_name: "#{f.object_name}[target_project_id]", disabled: @merge_request.persisted? }, { toggle_class: "js-compare-dropdown js-target-project" }
|
||||||
|
.dropdown-menu.dropdown-menu-selectable.dropdown-target-project
|
||||||
|
= dropdown_title("Select target project")
|
||||||
|
= dropdown_filter("Search projects")
|
||||||
|
= dropdown_content do
|
||||||
|
%ul
|
||||||
|
- projects.each do |project|
|
||||||
|
%li
|
||||||
|
%a{ href: "#", class: "#{("is-active" if f.object.target_project_id == project.id)}", data: { id: project.id } }
|
||||||
|
= project.path_with_namespace
|
||||||
|
.merge-request-select.dropdown
|
||||||
|
= f.hidden_field :target_branch
|
||||||
|
= dropdown_toggle f.object.target_branch, { toggle: "dropdown", field_name: "#{f.object_name}[target_branch]" }, { toggle_class: "js-compare-dropdown js-target-branch" }
|
||||||
|
.dropdown-menu.dropdown-menu-selectable.dropdown-target-branch.js-target-branch-dropdown
|
||||||
|
= dropdown_title("Select target branch")
|
||||||
|
= dropdown_filter("Search branches")
|
||||||
|
= dropdown_content do
|
||||||
|
%ul
|
||||||
|
- @merge_request.target_branches.each do |branch|
|
||||||
|
%li
|
||||||
|
%a{ href: "#", class: "#{("is-active" if f.object.target_branch == branch)}", data: { id: branch } }
|
||||||
|
= branch
|
||||||
.panel-footer
|
.panel-footer
|
||||||
.mr_target_commit
|
= icon('spinner spin', class: "js-target-loading")
|
||||||
|
%ul.list-unstyled.mr_target_commit
|
||||||
|
|
||||||
- if @merge_request.errors.any?
|
- if @merge_request.errors.any?
|
||||||
.alert.alert-danger
|
.alert.alert-danger
|
||||||
|
@ -45,40 +89,11 @@
|
||||||
and
|
and
|
||||||
%span.label-branch #{@merge_request.target_branch}
|
%span.label-branch #{@merge_request.target_branch}
|
||||||
are the same.
|
are the same.
|
||||||
|
= f.submit 'Compare branches and continue', class: "btn btn-new mr-compare-btn"
|
||||||
|
|
||||||
.form-actions
|
|
||||||
= f.submit 'Compare branches and continue', class: "btn btn-new mr-compare-btn"
|
|
||||||
|
|
||||||
:javascript
|
:javascript
|
||||||
var source_branch = $("#merge_request_source_branch")
|
new Compare({
|
||||||
, target_branch = $("#merge_request_target_branch")
|
targetProjectUrl: "#{update_branches_namespace_project_merge_requests_path(@source_project.namespace, @source_project)}",
|
||||||
, target_project = $("#merge_request_target_project_id");
|
sourceBranchUrl: "#{branch_from_namespace_project_merge_requests_path(@source_project.namespace, @source_project)}",
|
||||||
|
targetBranchUrl: "#{branch_to_namespace_project_merge_requests_path(@source_project.namespace, @source_project)}"
|
||||||
$.get("#{branch_from_namespace_project_merge_requests_path(@source_project.namespace, @source_project)}", {ref: source_branch.val() });
|
|
||||||
$.get("#{branch_to_namespace_project_merge_requests_path(@source_project.namespace, @source_project)}", {target_project_id: target_project.val(),ref: target_branch.val() });
|
|
||||||
|
|
||||||
target_project.on("change", function() {
|
|
||||||
$.get("#{update_branches_namespace_project_merge_requests_path(@source_project.namespace, @source_project)}", {target_project_id: $(this).val() });
|
|
||||||
});
|
|
||||||
source_branch.on("change", function() {
|
|
||||||
$.get("#{branch_from_namespace_project_merge_requests_path(@source_project.namespace, @source_project)}", {ref: $(this).val() });
|
|
||||||
$(".mr-compare-errors").fadeOut();
|
|
||||||
$(".mr-compare-btn").enable();
|
|
||||||
});
|
|
||||||
target_branch.on("change", function() {
|
|
||||||
$.get("#{branch_to_namespace_project_merge_requests_path(@source_project.namespace, @source_project)}", {target_project_id: target_project.val(),ref: $(this).val() });
|
|
||||||
$(".mr-compare-errors").fadeOut();
|
|
||||||
$(".mr-compare-btn").enable();
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
:javascript
|
|
||||||
$(".merge-request-form").on('submit', function () {
|
|
||||||
if ($("#merge_request_source_branch").val() === "" || $('#merge_request_target_branch').val() === "") {
|
|
||||||
$(".mr-compare-errors").html("You must select source and target branch to proceed");
|
|
||||||
$(".mr-compare-errors").fadeIn();
|
|
||||||
event.preventDefault();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
= commit_to_html(@commit, @source_project, false)
|
|
@ -1,3 +0,0 @@
|
||||||
:plain
|
|
||||||
$(".mr_source_commit").html("#{commit_to_html(@commit, @source_project, false)}");
|
|
||||||
$('.js-timeago').timeago()
|
|
|
@ -0,0 +1 @@
|
||||||
|
= commit_to_html(@commit, @target_project, false)
|
|
@ -1,3 +0,0 @@
|
||||||
:plain
|
|
||||||
$(".mr_target_commit").html("#{commit_to_html(@commit, @target_project, false)}");
|
|
||||||
$('.js-timeago').timeago()
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
%ul
|
||||||
|
- @target_branches.each do |branch|
|
||||||
|
%li
|
||||||
|
%a{ href: "#", class: "#{("is-active" if "a" == branch)}", data: { id: branch } }
|
||||||
|
= branch
|
|
@ -1,9 +0,0 @@
|
||||||
:plain
|
|
||||||
$(".target_branch").html("#{escape_javascript(options_for_select(@target_branches))}");
|
|
||||||
|
|
||||||
$('select.target_branch').select2({
|
|
||||||
width: 'resolve',
|
|
||||||
dropdownAutoWidth: true
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".mr_target_commit").html("");
|
|
|
@ -53,10 +53,11 @@
|
||||||
.issue-assignee
|
.issue-assignee
|
||||||
= f.label :assignee_id, "Assignee", class: 'control-label'
|
= f.label :assignee_id, "Assignee", class: 'control-label'
|
||||||
.col-sm-10
|
.col-sm-10
|
||||||
= users_select_tag("#{issuable.class.model_name.param_key}[assignee_id]",
|
.issuable-form-select-holder
|
||||||
placeholder: 'Select assignee', class: 'custom-form-control', null_user: true,
|
= users_select_tag("#{issuable.class.model_name.param_key}[assignee_id]",
|
||||||
selected: issuable.assignee_id, project: @target_project || @project,
|
placeholder: 'Select assignee', class: 'custom-form-control', null_user: true,
|
||||||
first_user: true, current_user: true, include_blank: true)
|
selected: issuable.assignee_id, project: @target_project || @project,
|
||||||
|
first_user: true, current_user: true, include_blank: true)
|
||||||
|
|
||||||
= link_to 'Assign to me', '#', class: 'btn assign-to-me-link'
|
= link_to 'Assign to me', '#', class: 'btn assign-to-me-link'
|
||||||
.form-group
|
.form-group
|
||||||
|
@ -64,8 +65,9 @@
|
||||||
= f.label :milestone_id, "Milestone", class: 'control-label'
|
= f.label :milestone_id, "Milestone", class: 'control-label'
|
||||||
.col-sm-10
|
.col-sm-10
|
||||||
- if milestone_options(issuable).present?
|
- if milestone_options(issuable).present?
|
||||||
= f.select(:milestone_id, milestone_options(issuable),
|
.issuable-form-select-holder
|
||||||
{ include_blank: true }, { class: 'select2', data: { placeholder: 'Select milestone' } })
|
= f.select(:milestone_id, milestone_options(issuable),
|
||||||
|
{ include_blank: true }, { class: 'select2', data: { placeholder: 'Select milestone' } })
|
||||||
- else
|
- else
|
||||||
.prepend-top-10
|
.prepend-top-10
|
||||||
%span.light No open milestones available.
|
%span.light No open milestones available.
|
||||||
|
|
|
@ -4,6 +4,7 @@ Feature: Project Forked Merge Requests
|
||||||
And I am a member of project "Shop"
|
And I am a member of project "Shop"
|
||||||
And I have a project forked off of "Shop" called "Forked Shop"
|
And I have a project forked off of "Shop" called "Forked Shop"
|
||||||
|
|
||||||
|
@javascript
|
||||||
Scenario: I submit new unassigned merge request to a forked project
|
Scenario: I submit new unassigned merge request to a forked project
|
||||||
Given I visit project "Forked Shop" merge requests page
|
Given I visit project "Forked Shop" merge requests page
|
||||||
And I click link "New Merge Request"
|
And I click link "New Merge Request"
|
||||||
|
|
|
@ -70,6 +70,7 @@ Feature: Project Merge Requests
|
||||||
When I click link "Reopen"
|
When I click link "Reopen"
|
||||||
Then I should see reopened merge request "Bug NS-04"
|
Then I should see reopened merge request "Bug NS-04"
|
||||||
|
|
||||||
|
@javascript
|
||||||
Scenario: I submit new unassigned merge request
|
Scenario: I submit new unassigned merge request
|
||||||
Given I click link "New Merge Request"
|
Given I click link "New Merge Request"
|
||||||
And I submit new merge request "Wiki Feature"
|
And I submit new merge request "Wiki Feature"
|
||||||
|
|
|
@ -34,10 +34,14 @@ class Spinach::Features::ProjectForkedMergeRequests < Spinach::FeatureSteps
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I fill out a "Merge Request On Forked Project" merge request' do
|
step 'I fill out a "Merge Request On Forked Project" merge request' do
|
||||||
select @forked_project.path_with_namespace, from: "merge_request_source_project_id"
|
first('.js-source-project').click
|
||||||
select @project.path_with_namespace, from: "merge_request_target_project_id"
|
first('.dropdown-source-project a', text: @forked_project.path_with_namespace)
|
||||||
select "fix", from: "merge_request_source_branch"
|
|
||||||
select "master", from: "merge_request_target_branch"
|
first('.js-target-project').click
|
||||||
|
first('.dropdown-target-project a', text: @project.path_with_namespace)
|
||||||
|
|
||||||
|
first('.js-source-branch').click
|
||||||
|
first('.dropdown-source-branch .dropdown-content a', text: 'fix').click
|
||||||
|
|
||||||
click_button "Compare branches and continue"
|
click_button "Compare branches and continue"
|
||||||
|
|
||||||
|
@ -115,10 +119,10 @@ class Spinach::Features::ProjectForkedMergeRequests < Spinach::FeatureSteps
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I fill out an invalid "Merge Request On Forked Project" merge request' do
|
step 'I fill out an invalid "Merge Request On Forked Project" merge request' do
|
||||||
expect(find(:select, "merge_request_source_project_id", {}).value).to eq @forked_project.id.to_s
|
expect(find_by_id("merge_request_source_project_id", visible: false).value).to eq @forked_project.id.to_s
|
||||||
expect(find(:select, "merge_request_target_project_id", {}).value).to eq @project.id.to_s
|
expect(find_by_id("merge_request_target_project_id", visible: false).value).to eq @project.id.to_s
|
||||||
expect(find(:select, "merge_request_source_branch", {}).value).to eq ""
|
expect(find_by_id("merge_request_source_branch", visible: false).value).to eq nil
|
||||||
expect(find(:select, "merge_request_target_branch", {}).value).to eq "master"
|
expect(find_by_id("merge_request_target_branch", visible: false).value).to eq "master"
|
||||||
click_button "Compare branches"
|
click_button "Compare branches"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -127,7 +131,7 @@ class Spinach::Features::ProjectForkedMergeRequests < Spinach::FeatureSteps
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'the target repository should be the original repository' do
|
step 'the target repository should be the original repository' do
|
||||||
expect(page).to have_select("merge_request_target_project_id", selected: @project.path_with_namespace)
|
expect(find_by_id("merge_request_target_project_id").value).to eq "#{@project.id}"
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I click "Assign to" dropdown"' do
|
step 'I click "Assign to" dropdown"' do
|
||||||
|
|
|
@ -93,8 +93,12 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I submit new merge request "Wiki Feature"' do
|
step 'I submit new merge request "Wiki Feature"' do
|
||||||
select "fix", from: "merge_request_source_branch"
|
find('.js-source-branch').click
|
||||||
select "feature", from: "merge_request_target_branch"
|
find('.dropdown-source-branch .dropdown-content a', text: 'fix').click
|
||||||
|
|
||||||
|
find('.js-target-branch').click
|
||||||
|
first('.dropdown-target-branch .dropdown-content a', text: 'feature').click
|
||||||
|
|
||||||
click_button "Compare branches"
|
click_button "Compare branches"
|
||||||
fill_in "merge_request_title", with: "Wiki Feature"
|
fill_in "merge_request_title", with: "Wiki Feature"
|
||||||
click_button "Submit merge request"
|
click_button "Submit merge request"
|
||||||
|
|
|
@ -213,13 +213,12 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I see Browse file link' do
|
step 'I see Browse file link' do
|
||||||
expect(page).to have_link 'Browse File »'
|
expect(page).to have_link 'Browse File'
|
||||||
expect(page).not_to have_link 'Browse Files »'
|
expect(page).not_to have_link 'Browse Files'
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I see Browse code link' do
|
step 'I see Browse code link' do
|
||||||
expect(page).to have_link 'Browse Files »'
|
expect(page).to have_link 'Browse Files'
|
||||||
expect(page).not_to have_link 'Browse File »'
|
|
||||||
expect(page).not_to have_link 'Browse Directory »'
|
expect(page).not_to have_link 'Browse Directory »'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
feature 'Create New Merge Request', feature: true, js: false do
|
feature 'Create New Merge Request', feature: true, js: true do
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
let(:project) { create(:project, :public) }
|
let(:project) { create(:project, :public) }
|
||||||
|
|
||||||
|
@ -13,9 +13,12 @@ feature 'Create New Merge Request', feature: true, js: false do
|
||||||
|
|
||||||
it 'generates a diff for an orphaned branch' do
|
it 'generates a diff for an orphaned branch' do
|
||||||
click_link 'New Merge Request'
|
click_link 'New Merge Request'
|
||||||
select "orphaned-branch", from: "merge_request_source_branch"
|
|
||||||
select "master", from: "merge_request_target_branch"
|
first('.js-source-branch').click
|
||||||
|
first('.dropdown-source-branch .dropdown-content a', text: 'orphaned-branch').click
|
||||||
|
|
||||||
click_button "Compare branches"
|
click_button "Compare branches"
|
||||||
|
click_link "Changes"
|
||||||
|
|
||||||
expect(page).to have_content "README.md"
|
expect(page).to have_content "README.md"
|
||||||
expect(page).to have_content "wm.png"
|
expect(page).to have_content "wm.png"
|
||||||
|
@ -23,6 +26,8 @@ feature 'Create New Merge Request', feature: true, js: false do
|
||||||
fill_in "merge_request_title", with: "Orphaned MR test"
|
fill_in "merge_request_title", with: "Orphaned MR test"
|
||||||
click_button "Submit merge request"
|
click_button "Submit merge request"
|
||||||
|
|
||||||
|
click_link "Check out branch"
|
||||||
|
|
||||||
expect(page).to have_content 'git checkout -b orphaned-branch origin/orphaned-branch'
|
expect(page).to have_content 'git checkout -b orphaned-branch origin/orphaned-branch'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue