class MergeRequest constructor: (@opts) -> @initContextWidget() this.$el = $('.merge-request') @diffs_loaded = if @opts.action == 'diffs' then true else false @commits_loaded = false this.activateTab(@opts.action) this.bindEvents() this.initMergeWidget() this.$('.show-all-commits').on 'click', => this.showAllCommits() modal = $('#modal_merge_info').modal(show: false) disableButtonIfEmptyField '#commit_message', '.accept_merge_request' if $("a.close-mr-link").length $("li.task-list-item input:checkbox").prop("disabled", false) # Local jQuery finder $: (selector) -> this.$el.find(selector) initContextWidget: -> $('.edit-merge_request.inline-update input[type="submit"]').hide() $(".issue-box .inline-update").on "change", "select", -> $(this).submit() $(".issue-box .inline-update").on "change", "#merge_request_assignee_id", -> $(this).submit() initMergeWidget: -> this.showState( @opts.current_status ) if this.$('.automerge_widget').length and @opts.check_enable $.get @opts.url_to_automerge_check, (data) => this.showState( data.merge_status ) , 'json' if @opts.ci_enable $.get @opts.url_to_ci_check, (data) => this.showCiState data.status if data.coverage this.showCiCoverage data.coverage , 'json' bindEvents: -> this.$('.merge-request-tabs').on 'click', 'a', (event) => a = $(event.currentTarget) href = a.attr('href') History.replaceState {path: href}, document.title, href event.preventDefault() this.$('.merge-request-tabs').on 'click', 'li', (event) => this.activateTab($(event.currentTarget).data('action')) this.$('.accept_merge_request').on 'click', -> $('.automerge_widget.can_be_merged').hide() $('.merge-in-progress').show() this.$('.remove_source_branch').on 'click', -> $('.remove_source_branch_widget').hide() $('.remove_source_branch_in_progress').show() this.$(".remove_source_branch").on "ajax:success", (e, data, status, xhr) -> location.reload() this.$(".remove_source_branch").on "ajax:error", (e, data, status, xhr) => this.$('.remove_source_branch_widget').hide() this.$('.remove_source_branch_in_progress').hide() this.$('.remove_source_branch_widget.failed').show() this.$(".task-list-item input:checkbox").on "click", -> is_checked = $(this).prop("checked") if $(this).is(":checked") state_event = "task_check" else state_event = "task_uncheck" mr_url = $("form.edit-merge_request").first().attr("action") mr_num = mr_url.match(/\d+$/) task_num = 0 $("li.task-list-item input:checkbox").each( (index, e) => if e == this task_num = index + 1 ) $.ajax type: "PATCH" url: mr_url data: "merge_request[state_event]=" + state_event + "&merge_request[task_num]=" + task_num activateTab: (action) -> this.$('.merge-request-tabs li').removeClass 'active' this.$('.tab-content').hide() switch action when 'diffs' this.$('.merge-request-tabs .diffs-tab').addClass 'active' this.loadDiff() unless @diffs_loaded this.$('.diffs').show() else this.$('.merge-request-tabs .notes-tab').addClass 'active' this.$('.notes').show() showState: (state) -> $('.automerge_widget').hide() $('.automerge_widget.' + state).show() showCiState: (state) -> $('.ci_widget').hide() allowed_states = ["failed", "running", "pending", "success"] if state in allowed_states $('.ci_widget.ci-' + state).show() else $('.ci_widget.ci-error').show() switch state when "success" $('.mr-state-widget').addClass("panel-success") when "failed" $('.mr-state-widget').addClass("panel-danger") when "running", "pending" $('.mr-state-widget').addClass("panel-warning") showCiCoverage: (coverage) -> cov_html = $('<span>') cov_html.addClass('ci-coverage') cov_html.text('Coverage ' + coverage + '%') $('.ci_widget:visible').append(cov_html) loadDiff: (event) -> $.ajax type: 'GET' url: this.$('.merge-request-tabs .diffs-tab a').attr('href') beforeSend: => this.$('.mr-loading-status .loading').show() complete: => @diffs_loaded = true this.$('.mr-loading-status .loading').hide() success: (data) => this.$(".diffs").html(data.html) dataType: 'json' showAllCommits: -> this.$('.first-commits').remove() this.$('.all-commits').removeClass 'hide' alreadyOrCannotBeMerged: -> this.$('.automerge_widget').hide() this.$('.merge-in-progress').hide() this.$('.automerge_widget.already_cannot_be_merged').show() this.MergeRequest = MergeRequest