diff options
author | Luke Bennett <lukeeeebennettplus@gmail.com> | 2016-08-13 21:51:34 +0100 |
---|---|---|
committer | Luke Bennett <lukeeeebennettplus@gmail.com> | 2016-09-12 14:35:26 +0100 |
commit | becead3fbde6b8da6a10b29297db887fcb229f33 (patch) | |
tree | 53cf0120867a4a510ecd020846a598858560c8cb | |
parent | 03891a62a71cdab2810b90123d9ff9947403a9ca (diff) | |
download | gitlab-ce-remove-merge-request-widget-inline-js.tar.gz |
Review changesremove-merge-request-widget-inline-js
-rw-r--r-- | app/assets/javascripts/merge_request_widget.js | 245 | ||||
-rw-r--r-- | app/controllers/projects/merge_requests_controller.rb | 15 | ||||
-rw-r--r-- | app/helpers/merge_requests_helper.rb | 25 | ||||
-rw-r--r-- | app/views/projects/merge_requests/widget/_show.html.haml | 15 |
4 files changed, 129 insertions, 171 deletions
diff --git a/app/assets/javascripts/merge_request_widget.js b/app/assets/javascripts/merge_request_widget.js index f9016949725..c733dadd22e 100644 --- a/app/assets/javascripts/merge_request_widget.js +++ b/app/assets/javascripts/merge_request_widget.js @@ -14,10 +14,7 @@ this.opts = opts || $('.js-merge-request-widget-options').data(); this.getInputs(); this.getButtons(true); - if (this.opts.checkStatus) { - this.getMergeStatus(); - } - + if (this.opts.checkStatus) this.getMergeStatus(); $('#modal_merge_info').modal({ show: false }); @@ -51,9 +48,7 @@ this.mergeWhenSucceedsButton = $('.merge_when_build_succeeds'); this.removeSourceBranchButton = $('.remove_source_branch'); this.removeSourceBranchWhenMergedButton = $('.remove_source_branch_when_merged'); - if (!skipListeners) { - return this.addButtonEventListeners(); - } + if (!skipListeners) return this.addButtonEventListeners(); }; MergeRequestWidget.prototype.clearEventListeners = function() { @@ -73,85 +68,65 @@ }; MergeRequestWidget.prototype.addEventListeners = function() { - var allowedPages; - allowedPages = ['show', 'commits', 'builds', 'pipelines', 'changes']; - return $(document).on('page:change.merge_request', (function(_this) { - return function() { - var page; - page = $('body').data('page').split(':').last(); - if (allowedPages.indexOf(page) < 0) { - clearInterval(_this.fetchBuildStatusInterval); - _this.cancelPolling(); - return _this.clearEventListeners(); - } - }; - })(this)); + var allowedPages = ['show', 'commits', 'builds', 'pipelines', 'changes']; + return $(document).on('page:change.merge_request', (function() { + var page = $('body').data('page').split(':').last(); + if (allowedPages.indexOf(page) < 0) { + clearInterval(this.fetchBuildStatusInterval); + this.cancelPolling(); + return this.clearEventListeners(); + } + }).bind(this)); }; MergeRequestWidget.prototype.addButtonEventListeners = function() { - this.mergeWhenSucceedsButton.on('click', (function(_this) { - return function(e) { - _this.mergeWhenSucceedsInput.val('1'); - return _this.acceptMergeRequest(e); - }; - })(this)); - this.removeSourceBranchWhenMergedButton.on('click', (function(_this) { - return function(e) { - _this.mergeWhenSucceedsInput.val('1'); - return _this.acceptMergeRequest(e, _this.removeSourceBranchWhenMergedButton.data('url')); - }; - })(this)); - this.acceptMergeRequestButton.on('click', (function(_this) { - return function(e) { - return _this.acceptMergeRequest(e); - }; - })(this)); - this.cancelMergeOnSuccessButton.on('click', (function(_this) { - return function(e) { - return _this.cancelMergeOnSuccess(e); - }; - })(this)); - return this.removeSourceBranchButton.on('click', (function(_this) { - return function(e) { - return _this.removeSourceBranch(e); - }; - })(this)); + this.mergeWhenSucceedsButton.on('click', (function(e) { + this.mergeWhenSucceedsInput.val('1'); + return this.acceptMergeRequest(e); + }).bind(this)); + this.removeSourceBranchWhenMergedButton.on('click', (function(e) { + this.mergeWhenSucceedsInput.val('1'); + return this.acceptMergeRequest(e, this.removeSourceBranchWhenMergedButton.data('url')); + }).bind(this)); + this.acceptMergeRequestButton.on('click', (function(e) { + return this.acceptMergeRequest(e); + }).bind(this)); + this.cancelMergeOnSuccessButton.on('click', (function(e) { + return this.cancelMergeOnSuccess(e); + }).bind(this)); + return this.removeSourceBranchButton.on('click', (function(e) { + return this.removeSourceBranch(e); + }).bind(this)); }; MergeRequestWidget.prototype.mergeInProgress = function(deleteSourceBranch) { - if (deleteSourceBranch == null) { - deleteSourceBranch = false; - } + if (deleteSourceBranch == null) deleteSourceBranch = false; + return $.ajax({ type: 'GET', url: $('.merge-request').data('url'), dataType: 'json', - success: (function(_this) { - return function(data) { - var urlSuffix; - if (data.state === "merged") { - urlSuffix = deleteSourceBranch ? '?deleted_source_branch=true' : ''; - return window.location.href = window.location.pathname + urlSuffix; - } else if (data.merge_error) { - return _this.mergeRequestWidgetBody.html("<h4>" + data.merge_error + "</h4>"); - } else { - return setTimeout(function() { - return _this.mergeInProgress(deleteSourceBranch); - }, 2000); - } - }; - })(this) + success: (function(data) { + if (data.state === "merged") { + var urlSuffix = deleteSourceBranch ? '?deleted_source_branch=true' : ''; + return window.location.href = window.location.pathname + urlSuffix; + } else if (data.merge_error) { + return this.mergeRequestWidgetBody.html("<h4>" + data.merge_error + "</h4>"); + } else { + return setTimeout((function() { + return this.mergeInProgress(deleteSourceBranch); + }).bind(this), 2000); + } + }).bind(this) }); }; MergeRequestWidget.prototype.getMergeStatus = function() { - return $.get(this.opts.mergeCheckUrl, (function(_this) { - return function(data) { - _this.mergeRequestWidget.replaceWith(data); - _this.getButtons(); - return _this.getInputs(); - }; - })(this)); + return $.get(this.opts.mergeCheckUrl, (function(data) { + this.mergeRequestWidget.replaceWith(data); + this.getButtons(); + return this.getInputs(); + }).bind(this)); }; MergeRequestWidget.prototype.ciLabelForStatus = function(status) { @@ -166,68 +141,50 @@ }; MergeRequestWidget.prototype.pollCIStatus = function() { - return this.fetchBuildStatusInterval = setInterval(((function(_this) { - return function() { - if (!_this.readyForCICheck) { - return; - } - _this.getCIStatus(true); - return _this.readyForCICheck = false; - }; - })(this)), 10000); + return this.fetchBuildStatusInterval = setInterval((function() { + if (!this.readyForCICheck) return; + this.getCIStatus(true); + return this.readyForCICheck = false; + }).bind(this), 10000); }; MergeRequestWidget.prototype.getCIStatus = function(showNotification) { - var _this; - _this = this; $('.ci-widget-fetching').show(); - return $.getJSON(this.opts.ciStatusUrl, (function(_this) { - return function(data) { - var message, status, title; - if (_this.cancel) { - return; - } - _this.readyForCICheck = true; - if (data.status === '') { - return; - } - if (_this.firstCICheck || data.status !== _this.opts.ciStatus && (data.status != null)) { - _this.opts.ciStatus = data.status; - _this.showCIStatus(data.status); - if (data.coverage) { - _this.showCICoverage(data.coverage); - } - // The first check should only update the UI, a notification - // should only be displayed on status changes - if (showNotification && !_this.firstCICheck) { - status = _this.ciLabelForStatus(data.status); - if (status === "preparing") { - title = _this.opts.ciTitle.preparing; - status = status.charAt(0).toUpperCase() + status.slice(1); - message = _this.opts.ciMessage.preparing.replace('{{status}}', status); - } else { - title = _this.opts.ciTitle.normal; - message = _this.opts.ciMessage.normal.replace('{{status}}', status); - } - title = title.replace('{{status}}', status); - message = message.replace('{{sha}}', data.sha); - message = message.replace('{{title}}', data.title); - notify(title, message, _this.opts.gitlabIcon, function() { - this.close(); - return Turbolinks.visit(_this.opts.buildsPath); - }); + return $.getJSON(this.opts.ciStatusUrl, (function(data) { + var message, status, title; + if (this.cancel) return; + this.readyForCICheck = true; + if (data.status === '') return; + if (this.firstCICheck || data.status !== this.opts.ciStatus && (data.status != null)) { + this.opts.ciStatus = data.status; + this.showCIStatus(data.status); + if (data.coverage) this.showCICoverage(data.coverage); + if (showNotification && !this.firstCICheck) { + status = this.ciLabelForStatus(data.status); + if (status === "preparing") { + title = this.opts.ciTitle.preparing; + status = status.charAt(0).toUpperCase() + status.slice(1); + message = this.opts.ciMessage.preparing.replace('{{status}}', status); + } else { + title = this.opts.ciTitle.normal; + message = this.opts.ciMessage.normal.replace('{{status}}', status); } - return _this.firstCICheck = false; + title = title.replace('{{status}}', status); + message = message.replace('{{sha}}', data.sha); + message = message.replace('{{title}}', data.title); + notify(title, message, this.opts.gitlabIcon, function() { + this.close(); + return Turbolinks.visit(this.opts.buildsPath); + }); } - }; - })(this)); + return this.firstCICheck = false; + } + }).bind(this)); }; MergeRequestWidget.prototype.showCIStatus = function(state) { var allowed_states; - if (state == null) { - return; - } + if (state == null) return; $('.ci_widget').hide(); allowed_states = ["failed", "canceled", "running", "pending", "success", "success_with_warnings", "skipped", "not_found"]; if (indexOf.call(allowed_states, state) >= 0) { @@ -260,9 +217,7 @@ }; MergeRequestWidget.prototype.acceptMergeRequest = function(e, url) { - if (e) { - e.preventDefault(); - } + if (e) e.preventDefault(); this.acceptMergeRequestInput.disable(); this.dynamicMergeButton.html('<i class="fa fa-spinner fa-spin"></i> Merge in progress'); return $.ajax({ @@ -276,33 +231,27 @@ merge_when_build_succeeds: this.mergeWhenSucceedsInput.val(), should_remove_source_branch: this.removeSourceBranchInput.is(':checked') ? this.removeSourceBranchInput.val() : void 0 } - }).done((function(_this) { - return function(res) { - if (res.merge_in_progress != null) { - return _this.mergeInProgress(res.merge_in_progress); - } else { - _this.mergeRequestWidgetBody.html(res); - _this.getButtons(); - return _this.getInputs(); - } - }; - })(this)); + }).done((function(res) { + if (res.merge_in_progress != null) { + return this.mergeInProgress(res.merge_in_progress); + } else { + this.mergeRequestWidgetBody.html(res); + this.getButtons(); + return this.getInputs(); + } + }).bind(this)); }; MergeRequestWidget.prototype.cancelMergeOnSuccess = function(e) { - if (e) { - e.preventDefault(); - } + if (e) e.preventDefault(); return $.ajax({ method: 'POST', url: this.opts.cancelMergeOnSuccessPath - }).done((function(_this) { - return function(res) { - _this.mergeRequestWidgetBody.html(res); - _this.getButtons(); - return _this.getInputs(); - }; - })(this)); + }).done((function(res) { + this.mergeRequestWidgetBody.html(res); + this.getButtons(); + return this.getInputs(); + }).bind(this)); }; MergeRequestWidget.prototype.removeSourceBranch = function(e) { diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index ac634b988ff..0c34ddebe77 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -312,14 +312,12 @@ class Projects::MergeRequestsController < Projects::ApplicationController # to wait until CI completes to know unless @merge_request.mergeable?(skip_ci_check: merge_when_build_succeeds_active?) @status = :failed - render_merge_request_widget_partial - return + return render_widget(@status) end if params[:sha] != @merge_request.diff_head_sha @status = :sha_mismatch - render_merge_request_widget_partial - return + return render_widget(@status) end TodoService.new.merge_merge_request(merge_request, current_user) @@ -329,8 +327,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController if params[:merge_when_build_succeeds].present? unless @merge_request.pipeline @status = :failed - render_merge_request_widget_partial - return + return render_widget(@status) end if @merge_request.pipeline.active? @@ -350,11 +347,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController @status = :success end - render_merge_request_widget_partial + render_widget(@status) end - def render_merge_request_widget_partial - case @status + def render_widget(status) + case status when :success render json: { merge_in_progress: params[:should_remove_source_branch] == '1' } when :merge_when_build_succeeds diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index 8abe7865fed..216c11012d4 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -110,4 +110,29 @@ module MergeRequestsHelper def version_index(merge_request_diff) @merge_request_diffs.size - @merge_request_diffs.index(merge_request_diff) end + + def widget_options + { + merge_check_url: merge_check_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), + check_enable: (@merge_request.unchecked? ? 'true' : 'false'), + ci_status_url: ci_status_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), + gitlab_icon: asset_path('gitlab_logo.png'), + ci_status: (@merge_request.pipeline ? @merge_request.pipeline.status : ''), + ci_message: { + normal: 'Build {{status}} for "{{title}}"', + preparing: '{{status}} build for "{{title}}"' + }, + ci_enable: (@project.ci_service ? 'true' : 'false'), + ci_title: { + preparing: "{{status}} build", + normal: "Build {{status}}" + }, + builds_path: builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), + pipelines_path: pipelines_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), + merge_path: merge_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), + remove_path: namespace_project_branch_path(@merge_request.source_project.namespace, @merge_request.source_project, @merge_request.source_branch), + cancel_merge_on_success_path: cancel_merge_when_build_succeeds_namespace_project_merge_request_path(@merge_request.target_project.namespace, @merge_request.target_project, @merge_request), + check_status: (@merge_request.open? && @merge_request.unchecked? ? 'true' : 'false') + } + end end diff --git a/app/views/projects/merge_requests/widget/_show.html.haml b/app/views/projects/merge_requests/widget/_show.html.haml index 7aefdd56566..ba3cf18b4a4 100644 --- a/app/views/projects/merge_requests/widget/_show.html.haml +++ b/app/views/projects/merge_requests/widget/_show.html.haml @@ -7,17 +7,4 @@ - elsif @merge_request.locked? = render 'projects/merge_requests/widget/locked' -.js-merge-request-widget-options{ data: { merge_check_url: merge_check_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), - check_enable: (@merge_request.unchecked? ? 'true' : 'false'), - ci_status_url: ci_status_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), - gitlab_icon: asset_path('gitlab_logo.png'), - ci_status: (@merge_request.pipeline ? @merge_request.pipeline.status : ''), - ci_message: { normal: 'Build {{status}} for "{{title}}"', preparing: '{{status}} build for "{{title}}"' }, - ci_enable: (@project.ci_service ? 'true' : 'false'), - ci_title: { preparing: "{{status}} build", normal: "Build {{status}}" }, - builds_path: builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), - pipelines_path: pipelines_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), - merge_path: merge_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), - remove_path: namespace_project_branch_path(@merge_request.source_project.namespace, @merge_request.source_project, @merge_request.source_branch), - cancel_merge_on_success_path: cancel_merge_when_build_succeeds_namespace_project_merge_request_path(@merge_request.target_project.namespace, @merge_request.target_project, @merge_request), - check_status: (@merge_request.open? && @merge_request.unchecked? ? 'true' : 'false') } } +.js-merge-request-widget-options{ data: widget_options } |