From a1566a9c8645510f83782d181e41044d1ad2ec7f Mon Sep 17 00:00:00 2001
From: Koen Punt <koen@koenpunt.nl>
Date: Sat, 5 Jan 2013 02:18:39 +0100
Subject: [PATCH] Converted merge_requests.js to coffeescript and updated code

---
 app/assets/javascripts/merge_requests.js      | 132 ------------------
 .../javascripts/merge_requests.js.coffee      |  97 +++++++++++++
 app/assets/stylesheets/common.scss            |   2 +-
 .../stylesheets/sections/merge_requests.scss  |   4 +-
 app/views/merge_requests/_form.html.haml      |   7 +-
 app/views/merge_requests/_show.html.haml      |  57 ++++----
 app/views/merge_requests/automerge.js.haml    |   2 +-
 app/views/merge_requests/commits.js.haml      |   2 +-
 app/views/merge_requests/diffs.js.haml        |   6 +-
 app/views/merge_requests/index.html.haml      |   4 +-
 app/views/merge_requests/show.js.haml         |   2 +-
 .../merge_requests/show/_commits.html.haml    |   8 +-
 .../merge_requests/show/_mr_accept.html.haml  |   2 +-
 13 files changed, 142 insertions(+), 183 deletions(-)
 delete mode 100644 app/assets/javascripts/merge_requests.js
 create mode 100644 app/assets/javascripts/merge_requests.js.coffee

diff --git a/app/assets/javascripts/merge_requests.js b/app/assets/javascripts/merge_requests.js
deleted file mode 100644
index ee714f9cab..0000000000
--- a/app/assets/javascripts/merge_requests.js
+++ /dev/null
@@ -1,132 +0,0 @@
-var MergeRequest = { 
-  diffs_loaded: false,
-  commits_loaded: false,
-  opts: false,
-
-  init:
-    function(opts) {
-      var self = this;
-      self.opts = opts;
-
-      self.initTabs();
-      self.initMergeWidget();
-
-      $(".mr_show_all_commits").bind("click", function() { 
-        self.showAllCommits();
-      });
-    },
-
-  initMergeWidget: 
-    function() { 
-      var self = this;
-      self.showState(self.opts.current_state);
-
-      if($(".automerge_widget").length && self.opts.check_enable){
-        $.get(self.opts.url_to_automerge_check, function(data){
-          self.showState(data.state);
-        }, "json");
-      }
-
-      if(self.opts.ci_enable){
-        $.get(self.opts.url_to_ci_check, function(data){
-          self.showCiState(data.status);
-        }, "json");
-      }
-    },
-
-  initTabs:
-    function() { 
-      $(".mr_nav_tabs a").live("click", function() { 
-        $(".mr_nav_tabs a").parent().removeClass("active");
-        $(this).parent().addClass("active");
-      });
-
-      var current_tab;
-      if(this.opts.action == "diffs") { 
-        current_tab = $(".mr_nav_tabs .merge-diffs-tab");
-      } else {
-        current_tab = $(".mr_nav_tabs .merge-notes-tab");
-      }
-      current_tab.parent().addClass("active");
-
-      this.initNotesTab();
-      this.initDiffTab();
-    },
-
-  initNotesTab: 
-    function() { 
-      $(".mr_nav_tabs a.merge-notes-tab").live("click", function(e) { 
-        $(".merge-request-diffs").hide();
-        $(".merge_request_notes").show();
-        var mr_path = $(".merge-notes-tab").attr("data-url");
-        history.pushState({ path: mr_path }, '', mr_path);
-        e.preventDefault();
-      });
-    },
-
-  initDiffTab: 
-    function() { 
-      $(".mr_nav_tabs a.merge-diffs-tab").live("click", function(e) { 
-        if(!MergeRequest.diffs_loaded) { 
-          MergeRequest.loadDiff(); 
-        }
-        $(".merge_request_notes").hide();
-        $(".merge-request-diffs").show();
-        var mr_diff_path = $(".merge-diffs-tab").attr("data-url");
-        history.pushState({ path: mr_diff_path }, '', mr_diff_path);
-        e.preventDefault();
-      });
-
-    },
-
-  showState:
-    function(state){
-      $(".automerge_widget").hide();
-      $(".automerge_widget." + state).show();
-    },
-
-  showCiState:
-    function(state){
-      $(".ci_widget").hide();
-      $(".ci_widget.ci-" + state).show();
-    },
-
-  loadDiff:
-    function() { 
-      $(".dashboard-loader").show();
-      $.ajax({
-        type: "GET",
-        url: $(".merge-diffs-tab").attr("data-url"),
-        beforeSend: function(){ $('.status').addClass("loading")},
-        complete: function(){ 
-          MergeRequest.diffs_loaded = true;
-          $(".merge_request_notes").hide();
-          $('.status').removeClass("loading");
-        },
-        dataType: "script"});
-    }, 
-
-  showAllCommits: 
-    function() { 
-      $(".first_mr_commits").remove();
-      $(".all_mr_commits").removeClass("hide");
-    },
-
-  already_cannot_be_merged:
-    function(){
-        $(".automerge_widget").hide();
-        $(".merge_in_progress").hide();
-        $(".automerge_widget.already_cannot_be_merged").show();
-    }
-};
-
-/*
- * Filter merge requests
- */
-function merge_requestsPage() {
-  $("#assignee_id").chosen();
-  $("#milestone_id").chosen();
-  $("#milestone_id, #assignee_id").on("change", function(){
-    $(this).closest("form").submit();
-  });
-}
diff --git a/app/assets/javascripts/merge_requests.js.coffee b/app/assets/javascripts/merge_requests.js.coffee
new file mode 100644
index 0000000000..a73d04580a
--- /dev/null
+++ b/app/assets/javascripts/merge_requests.js.coffee
@@ -0,0 +1,97 @@
+#
+# * Filter merge requests
+# 
+@merge_requestsPage = ->
+  $('#assignee_id').chosen()
+  $('#milestone_id').chosen()
+  $('#milestone_id, #assignee_id').on 'change', ->
+    $(this).closest('form').submit()
+
+class MergeRequest
+  
+  constructor: (@opts) ->
+    this.$el = $('.merge-request')
+    @diffs_loaded = false
+    @commits_loaded = false
+    
+    this.activateTab(@opts.action)
+    
+    this.bindEvents()
+    
+    this.initMergeWidget()
+    this.$('.show-all-commits').on 'click', =>
+      this.showAllCommits()
+
+  # Local jQuery finder
+  $: (selector) ->
+    this.$el.find(selector)
+
+  initMergeWidget: ->
+    this.showState( @opts.current_state )
+    
+    if this.$('.automerge_widget').length and @opts.check_enable
+      $.get @opts.url_to_automerge_check, (data) =>
+        this.showState( data.state )
+      , 'json'
+
+    if @opts.ci_enable
+      $.get self.opts.url_to_ci_check, (data) =>
+        this.showCiState data.status
+      , 'json'
+
+  bindEvents: ->
+    this.$('.nav-tabs').on 'click', 'a', (event) =>
+      a = $(event.currentTarget)
+      
+      href = a.attr('href')
+      History.replaceState {path: href}, document.title, href
+      
+      event.preventDefault()
+      
+    this.$('.nav-tabs').on 'click', 'li', (event) =>
+      this.activateTab($(event.currentTarget).data('action'))
+
+  activateTab: (action) ->
+    this.$('.nav-tabs li').removeClass 'active'
+    this.$('.tab-content').hide()
+    switch action
+      when 'diffs'
+        this.$('.nav-tabs .diffs-tab').addClass 'active'
+        this.loadDiff() unless @diffs_loaded
+        this.$('.diffs').show()
+      else
+        this.$('.nav-tabs .notes-tab').addClass 'active'
+        this.$('.notes').show()
+
+  showState: (state) ->
+    $('.automerge_widget').hide()
+    $('.automerge_widget.' + state).show()
+
+  showCiState: (state) ->
+    $('.ci_widget').hide()
+    $('.ci_widget.ci-' + state).show()
+
+  loadDiff: (event) ->
+    $('.dashboard-loader').show()
+    $.ajax
+      type: 'GET'
+      url: this.$('.nav-tabs .diffs-tab a').attr('href')
+      beforeSend: =>
+        this.$('.status').addClass 'loading'
+
+      complete: =>
+        @diffs_loaded = true
+        this.$('.status').removeClass 'loading'
+
+      dataType: 'script'
+
+  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
\ No newline at end of file
diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss
index dcdfcdb289..62adb777c0 100644
--- a/app/assets/stylesheets/common.scss
+++ b/app/assets/stylesheets/common.scss
@@ -425,7 +425,7 @@ li.note {
 
 
 .supp_diff_link,
-.mr_show_all_commits {
+.show-all-commits {
   cursor: pointer;
 }
 
diff --git a/app/assets/stylesheets/sections/merge_requests.scss b/app/assets/stylesheets/sections/merge_requests.scss
index 66ec642e05..93d40bf920 100644
--- a/app/assets/stylesheets/sections/merge_requests.scss
+++ b/app/assets/stylesheets/sections/merge_requests.scss
@@ -43,7 +43,7 @@
   }
 }
 
-.mr_nav_tabs {
+.merge-request .nav-tabs{
   li {
     a {
       font-weight: bold;
@@ -65,7 +65,7 @@ li.merge_request {
   }
 }
 
-.merge_in_progress {
+.merge-in-progress {
   @extend .padded;
   @extend .append-bottom-10;
 }
diff --git a/app/views/merge_requests/_form.html.haml b/app/views/merge_requests/_form.html.haml
index 67444dad5d..0aaf6566d4 100644
--- a/app/views/merge_requests/_form.html.haml
+++ b/app/views/merge_requests/_form.html.haml
@@ -1,4 +1,4 @@
-= form_for [@project, @merge_request], html: { class: "new_merge_request form-horizontal" } do |f|
+= form_for [@project, @merge_request], html: { class: "#{controller.action_name}-merge-request form-horizontal" } do |f|
   -if @merge_request.errors.any?
     .alert-message.block-message.error
       %ul
@@ -61,8 +61,9 @@
 :javascript
   $(function(){
     disableButtonIfEmptyField("#merge_request_title", ".save-btn");
-    var source_branch = $("#merge_request_source_branch");
-    var target_branch = $("#merge_request_target_branch");
+
+    var source_branch = $("#merge_request_source_branch")
+      , target_branch = $("#merge_request_target_branch");
 
     $.get("#{branch_from_project_merge_requests_path(@project)}", {ref: source_branch.val() });
     $.get("#{branch_to_project_merge_requests_path(@project)}", {ref: target_branch.val() });
diff --git a/app/views/merge_requests/_show.html.haml b/app/views/merge_requests/_show.html.haml
index 20ba991e79..b65d1596f5 100644
--- a/app/views/merge_requests/_show.html.haml
+++ b/app/views/merge_requests/_show.html.haml
@@ -1,33 +1,35 @@
-= render "merge_requests/show/mr_title"
-= render "merge_requests/show/how_to_merge"
-= render "merge_requests/show/mr_box"
-= render "merge_requests/show/mr_accept"
-- if @project.gitlab_ci?
-  = render "merge_requests/show/mr_ci"
-= render "merge_requests/show/commits"
+.merge-request
+  = render "merge_requests/show/mr_title"
+  = render "merge_requests/show/how_to_merge"
+  = render "merge_requests/show/mr_box"
+  = render "merge_requests/show/mr_accept"
+  - if @project.gitlab_ci?
+    = render "merge_requests/show/mr_ci"
+  = render "merge_requests/show/commits"
 
-- if @commits.present?
-  %ul.nav.nav-tabs.mr_nav_tabs
-    %li
-      = link_to "#notes", "data-url" => project_merge_request_path(@project, @merge_request), class: "merge-notes-tab tab" do
-        %i.icon-comment
-        Comments
-    %li
-      = link_to "#diffs", "data-url" => diffs_project_merge_request_path(@project, @merge_request), class: "merge-diffs-tab tab" do
-        %i.icon-list-alt
-        Diff
+  - if @commits.present?
+    %ul.nav.nav-tabs
+      %li.notes-tab{data: {action: 'notes'}}
+        = link_to project_merge_request_path(@project, @merge_request) do
+          %i.icon-comment
+          Comments
+      %li.diffs-tab{data: {action: 'diffs'}}
+        = link_to diffs_project_merge_request_path(@project, @merge_request) do
+          %i.icon-list-alt
+          Diff
 
-.merge_request_notes.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" }
-  = render("notes/notes_with_form", tid: @merge_request.id, tt: "merge_request")
-.merge-request-diffs
-  = render "merge_requests/show/diffs" if @diffs
-.status
+  .notes.tab-content.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" }
+    = render("notes/notes_with_form", tid: @merge_request.id, tt: "merge_request")
+  .diffs.tab-content
+    = render "merge_requests/show/diffs" if @diffs
+  .status
 
-= render "notes/per_line_form"
+  = render "notes/per_line_form"
 
 :javascript
+  var merge_request;
   $(function(){
-    MergeRequest.init({
+    merge_request = new MergeRequest({
       url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
       check_enable: #{@merge_request.state == MergeRequest::UNCHECKED ? "true" : "false"},
       url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}",
@@ -35,10 +37,5 @@
       current_state: "#{@merge_request.human_state}",
       action: "#{controller.action_name}"
     });
-
-    $(".edit_merge_request").live("ajax:beforeSend", function() {
-      $('.can_be_merged').hide();
-      $('.merge_in_progress').show();
-    })
-  })
+  });
 
diff --git a/app/views/merge_requests/automerge.js.haml b/app/views/merge_requests/automerge.js.haml
index 93e184455a..e01ff662e7 100644
--- a/app/views/merge_requests/automerge.js.haml
+++ b/app/views/merge_requests/automerge.js.haml
@@ -3,5 +3,5 @@
     location.reload();
 -else
   :plain
-    MergeRequest.already_cannot_be_merged()
+    merge_request.alreadyOrCannotBeMerged()
 
diff --git a/app/views/merge_requests/commits.js.haml b/app/views/merge_requests/commits.js.haml
index 76322bdb21..923b1ea032 100644
--- a/app/views/merge_requests/commits.js.haml
+++ b/app/views/merge_requests/commits.js.haml
@@ -1,4 +1,4 @@
 :plain
-  $(".merge-request-commits").html("#{escape_javascript(render(partial: "commits"))}");
+  merge_request.$(".commits").html("#{escape_javascript(render(partial: "commits"))}");
 
 
diff --git a/app/views/merge_requests/diffs.js.haml b/app/views/merge_requests/diffs.js.haml
index 9853998532..1d92f1a6fb 100644
--- a/app/views/merge_requests/diffs.js.haml
+++ b/app/views/merge_requests/diffs.js.haml
@@ -1,7 +1,5 @@
 :plain
-  $(".merge-request-diffs").html("#{escape_javascript(render(partial: "merge_requests/show/diffs"))}");
+  merge_request.$(".diffs").html("#{escape_javascript(render(partial: "merge_requests/show/diffs"))}");
 
-  $(function(){
-    PerLineNotes.init();
-  });
+  PerLineNotes.init();
 
diff --git a/app/views/merge_requests/index.html.haml b/app/views/merge_requests/index.html.haml
index 5b234bfbe0..f0050d9490 100644
--- a/app/views/merge_requests/index.html.haml
+++ b/app/views/merge_requests/index.html.haml
@@ -43,6 +43,4 @@
             %span.cgray.right #{@merge_requests.total_count} merge requests for this filter
 
 :javascript
-  $(function() {
-      merge_requestsPage();
-    })
+  $(merge_requestsPage);
diff --git a/app/views/merge_requests/show.js.haml b/app/views/merge_requests/show.js.haml
index f44ccbb512..a2a7930745 100644
--- a/app/views/merge_requests/show.js.haml
+++ b/app/views/merge_requests/show.js.haml
@@ -1,2 +1,2 @@
 :plain
-  $(".merge-request-notes").html("#{escape_javascript(render notes/notes_with_form", tid: @merge_request.id, tt: "merge_request")}");
+  merge_request.$(".notes").html("#{escape_javascript(render "notes/notes_with_form", tid: @merge_request.id, tt: "merge_request")}");
diff --git a/app/views/merge_requests/show/_commits.html.haml b/app/views/merge_requests/show/_commits.html.haml
index 40d85db026..5e27b6dc25 100644
--- a/app/views/merge_requests/show/_commits.html.haml
+++ b/app/views/merge_requests/show/_commits.html.haml
@@ -3,16 +3,16 @@
     %h5.title
       %i.icon-list
       Commits (#{@commits.count})
-    .merge-request-commits
+    .commits
       - if @commits.count > 8
-        %ul.first_mr_commits.well-list
+        %ul.first-commits.well-list
           - @commits.first(8).each do |commit|
             = render "commits/commit", commit: commit
           %li.bottom
             8 of #{@commits.count} commits displayed.
             %strong
-              %a.mr_show_all_commits Click here to show all
-        %ul.all_mr_commits.hide.well-list
+              %a.show-all-commits Click here to show all
+        %ul.all-commits.hide.well-list
           - @commits.each do |commit|
             = render "commits/commit", commit: commit
 
diff --git a/app/views/merge_requests/show/_mr_accept.html.haml b/app/views/merge_requests/show/_mr_accept.html.haml
index b7e6893713..81ce987c18 100644
--- a/app/views/merge_requests/show/_mr_accept.html.haml
+++ b/app/views/merge_requests/show/_mr_accept.html.haml
@@ -40,6 +40,6 @@
     .alert.alert-info
       %strong This merge request already can not be merged. Try to reload page.
 
-  .merge_in_progress.hide
+  .merge-in-progress.hide
     %span.cgray Merge is in progress. Please wait. Page will be automatically reloaded. &nbsp;
     = image_tag "ajax_loader.gif"
-- 
2.30.9