From 0b981eb9b3fbef8f34b9be37a2484c96189ea417 Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Thu, 2 May 2013 14:36:53 +0300
Subject: [PATCH] coffescript refactoring pt.1

---
 app/assets/javascripts/commit.js.coffee      |  5 +-
 app/assets/javascripts/dashboard.js.coffee   | 83 +++++++++++---------
 app/assets/javascripts/dispatcher.js.coffee  | 23 ++++--
 app/assets/javascripts/project.js.coffee     | 37 +++++++++
 app/assets/javascripts/projects.js.coffee    | 35 ---------
 app/assets/javascripts/wall.js.coffee        | 42 +++++-----
 app/assets/javascripts/wikis.js.coffee       | 19 +++++
 app/views/graph/show.html.haml               | 13 ++-
 app/views/layouts/project_resource.html.haml |  2 +-
 app/views/merge_requests/_show.html.haml     | 18 ++---
 app/views/walls/show.html.haml               |  5 --
 app/views/wikis/_new.html.haml               | 21 +----
 12 files changed, 158 insertions(+), 145 deletions(-)
 create mode 100644 app/assets/javascripts/project.js.coffee
 delete mode 100644 app/assets/javascripts/projects.js.coffee
 create mode 100644 app/assets/javascripts/wikis.js.coffee

diff --git a/app/assets/javascripts/commit.js.coffee b/app/assets/javascripts/commit.js.coffee
index 42af060a58e..9f55a1e6368 100644
--- a/app/assets/javascripts/commit.js.coffee
+++ b/app/assets/javascripts/commit.js.coffee
@@ -1,5 +1,6 @@
-@Commit =
-  init: ->
+class Commit
+  constructor: ->
     $('.files .file').each ->
       new CommitFile(this)
 
+@Commit = Commit
diff --git a/app/assets/javascripts/dashboard.js.coffee b/app/assets/javascripts/dashboard.js.coffee
index 4189c90bbfa..9beca261467 100644
--- a/app/assets/javascripts/dashboard.js.coffee
+++ b/app/assets/javascripts/dashboard.js.coffee
@@ -1,39 +1,44 @@
-window.dashboardPage = ->
-  Pager.init 20, true
-  initSidebarTab()
-  $(".event_filter_link").bind "click", (event) ->
-    event.preventDefault()
-    toggleFilter $(this)
-    reloadActivities()
-
-reloadActivities = ->
-  $(".content_list").html ''
-  Pager.init 20, true
-
-toggleFilter = (sender) ->
-  sender.parent().toggleClass "inactive"
-  event_filters = $.cookie("event_filter")
-  filter = sender.attr("id").split("_")[0]
-  if event_filters
-    event_filters = event_filters.split(",")
-  else
-    event_filters = new Array()
-
-  index = event_filters.indexOf(filter)
-  if index is -1
-    event_filters.push filter
-  else
-    event_filters.splice index, 1
-
-  $.cookie "event_filter", event_filters.join(",")
-
-initSidebarTab = ->
-  key = "dashboard_sidebar_filter"
-
-  # store selection in cookie
-  $('.dash-sidebar-tabs a').on 'click', (e) ->
-    $.cookie(key, $(e.target).attr('id'))
-
-  # show tab from cookie
-  sidebar_filter = $.cookie(key)
-  $("#" + sidebar_filter).tab('show') if sidebar_filter
+class Dashboard
+  constructor: ->
+    Pager.init 20, true
+    @initSidebarTab()
+
+    $(".event_filter_link").bind "click", (event) =>
+      event.preventDefault()
+      @toggleFilter($(event.currentTarget))
+      @reloadActivities()
+
+  reloadActivities: ->
+    $(".content_list").html ''
+    Pager.init 20, true
+
+  toggleFilter: (sender) ->
+    sender.parent().toggleClass "inactive"
+    event_filters = $.cookie("event_filter")
+    filter = sender.attr("id").split("_")[0]
+    if event_filters
+      event_filters = event_filters.split(",")
+    else
+      event_filters = new Array()
+
+    index = event_filters.indexOf(filter)
+    if index is -1
+      event_filters.push filter
+    else
+      event_filters.splice index, 1
+
+    $.cookie "event_filter", event_filters.join(",")
+
+  initSidebarTab: ->
+    key = "dashboard_sidebar_filter"
+
+    # store selection in cookie
+    $('.dash-sidebar-tabs a').on 'click', (e) ->
+      $.cookie(key, $(e.target).attr('id'))
+
+    # show tab from cookie
+    sidebar_filter = $.cookie(key)
+    $("#" + sidebar_filter).tab('show') if sidebar_filter
+
+
+@Dashboard = Dashboard
diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee
index cb48fff02e3..044f6ffdd47 100644
--- a/app/assets/javascripts/dispatcher.js.coffee
+++ b/app/assets/javascripts/dispatcher.js.coffee
@@ -4,16 +4,27 @@ $ ->
 class Dispatcher
   constructor: () ->
     page = $('body').attr('data-page')
+    project_id = $('body').attr('data-project-id')
 
     console.log(page)
+ 
+    path = page.split(':')
 
     switch page
-      when 'issues:index' then Issues.init()
-      when 'dashboard:show' then dashboardPage()
-      when 'commit:show' then Commit.init()
+      when 'issues:index'
+        Issues.init()
+      when 'dashboard:show'
+        new Dashboard()
+      when 'commit:show'
+        new Commit()
       when 'groups:show', 'teams:show', 'projects:show'
         Pager.init(20, true)
       when 'projects:new', 'projects:edit'
-        new Projects()
-      when 'admin:teams:show', 'admin:groups:show', 'admin:logs:show', 'admin:users:new'
-        Admin.init()
+        new Project()
+      when 'walls:show'
+        new Wall(project_id)
+
+    switch path.first()
+      when 'admin' then Admin.init()
+      when 'wikis' then new Wikis()
+
diff --git a/app/assets/javascripts/project.js.coffee b/app/assets/javascripts/project.js.coffee
new file mode 100644
index 00000000000..f926188d23f
--- /dev/null
+++ b/app/assets/javascripts/project.js.coffee
@@ -0,0 +1,37 @@
+class Project
+  constructor: ->
+    $('.new_project, .edit_project').on 'ajax:before', ->
+      $('.project_new_holder, .project_edit_holder').hide()
+      $('.save-project-loader').show()
+
+    $('form #project_default_branch').chosen()
+    disableButtonIfEmptyField '#project_name', '.project-submit'
+    
+    $('#project_issues_enabled').change ->
+      if ($(this).is(':checked') == true)
+        $('#project_issues_tracker').removeAttr('disabled')
+      else
+        $('#project_issues_tracker').attr('disabled', 'disabled')
+
+      $('#project_issues_tracker').change()
+
+    $('#project_issues_tracker').change ->
+      if ($(this).val() == gon.default_issues_tracker || $(this).is(':disabled'))
+        $('#project_issues_tracker_id').attr('disabled', 'disabled')
+      else
+        $('#project_issues_tracker_id').removeAttr('disabled')
+
+@Project = Project
+
+$ ->
+  # Git clone panel switcher
+  scope = $ '.project_clone_holder'
+  if scope.length > 0
+    $('a, button', scope).click ->
+      $('a, button', scope).removeClass 'active'
+      $(@).addClass 'active'
+      $('#project_clone', scope).val $(@).data 'clone'
+
+  # Ref switcher
+  $('.project-refs-select').on 'change', ->
+    $(@).parents('form').submit()
diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee
deleted file mode 100644
index 24106c61b75..00000000000
--- a/app/assets/javascripts/projects.js.coffee
+++ /dev/null
@@ -1,35 +0,0 @@
-window.Projects = ->
-  $('.new_project, .edit_project').on 'ajax:before', ->
-    $('.project_new_holder, .project_edit_holder').hide()
-    $('.save-project-loader').show()
-
-  $('form #project_default_branch').chosen()
-  disableButtonIfEmptyField '#project_name', '.project-submit'
-
-$ ->
-  # Git clone panel switcher
-  scope = $ '.project_clone_holder'
-  if scope.length > 0
-    $('a, button', scope).click ->
-      $('a, button', scope).removeClass 'active'
-      $(@).addClass 'active'
-      $('#project_clone', scope).val $(@).data 'clone'
-
-  # Ref switcher
-  $('.project-refs-select').on 'change', ->
-    $(@).parents('form').submit()
-
-  $('#project_issues_enabled').change ->
-    if ($(this).is(':checked') == true)
-      $('#project_issues_tracker').removeAttr('disabled')
-    else
-      $('#project_issues_tracker').attr('disabled', 'disabled')
-
-    $('#project_issues_tracker').change()
-
-  $('#project_issues_tracker').change ->
-    if ($(this).val() == gon.default_issues_tracker || $(this).is(':disabled'))
-      $('#project_issues_tracker_id').attr('disabled', 'disabled')
-    else
-      $('#project_issues_tracker_id').removeAttr('disabled')
-
diff --git a/app/assets/javascripts/wall.js.coffee b/app/assets/javascripts/wall.js.coffee
index e2fca3ddee4..c8fc960e174 100644
--- a/app/assets/javascripts/wall.js.coffee
+++ b/app/assets/javascripts/wall.js.coffee
@@ -1,32 +1,32 @@
-@Wall =
-  note_ids: []
-  project_id: null
-
-  init: (project_id) ->
-    Wall.project_id = project_id
-    Wall.getContent()
-    Wall.initRefresh()
-    Wall.initForm()
+class Wall
+  constructor: (project_id) ->
+    @project_id = project_id
+    @note_ids = []
+    @getContent()
+    @initRefresh()
+    @initForm()
   
   # 
   # Gets an initial set of notes.
   # 
   getContent: ->
-    Api.notes Wall.project_id, (notes) ->
-      $.each notes, (i, note) ->
+    Api.notes @project_id, (notes) =>
+      $.each notes, (i, note) =>
         # render note if it not present in loaded list
         # or skip if rendered
-        if $.inArray(note.id, Wall.note_ids) == -1
-          Wall.note_ids.push(note.id)
-          Wall.renderNote(note)
-          Wall.scrollDown()
+        if $.inArray(note.id, @note_ids) == -1
+          @note_ids.push(note.id)
+          @renderNote(note)
+          @scrollDown()
           $("abbr.timeago").timeago()
 
   initRefresh: ->
-    setInterval("Wall.refresh()", 10000)
+    setInterval =>
+      @refresh()
+    , 10000
 
   refresh: ->
-    Wall.getContent()
+    @getContent()
 
   scrollDown: ->
     notes = $('ul.notes')
@@ -36,8 +36,8 @@
     form = $('.wall-note-form')
     form.find("#target_type").val('wall')
 
-    form.on 'ajax:success', ->
-      Wall.refresh()
+    form.on 'ajax:success', =>
+      @refresh()
       form.find(".js-note-text").val("").trigger("input")
     
     form.on 'ajax:complete', ->
@@ -58,7 +58,7 @@
     form.show()
   
   renderNote: (note) ->
-    template = Wall.noteTemplate()
+    template = @noteTemplate()
     template = template.replace('{{author_name}}', note.author.name)
     template = template.replace('{{created_at}}', note.created_at)
     template = template.replace('{{text}}', linkify(sanitize(note.body)))
@@ -81,3 +81,5 @@
       </span>
       <abbr class="timeago" title="{{created_at}}">{{created_at}}</abbr>
     </li>'
+
+@Wall = Wall
diff --git a/app/assets/javascripts/wikis.js.coffee b/app/assets/javascripts/wikis.js.coffee
new file mode 100644
index 00000000000..f2867c8026e
--- /dev/null
+++ b/app/assets/javascripts/wikis.js.coffee
@@ -0,0 +1,19 @@
+class Wikis
+  constructor: ->
+    modal = $('#modal-new-wiki').modal({modal: true, show:false})
+
+    $('.add-new-wiki').bind "click", ->
+      modal.show()
+
+    $('.build-new-wiki').bind "click", ->
+      field = $('#new_wiki_path')
+      slug = field.val()
+      path = field.attr('data-wikis-path')
+
+      if(slug.length > 0)
+        location.href = path + "/" + slug
+
+    $('.modal-header .close').bind "click", ->
+      modal.hide()
+
+@Wikis = Wikis
diff --git a/app/views/graph/show.html.haml b/app/views/graph/show.html.haml
index e45aca1ddcb..682d2798906 100644
--- a/app/views/graph/show.html.haml
+++ b/app/views/graph/show.html.haml
@@ -7,11 +7,10 @@
 
 :javascript
   var branch_graph;
-  $(function(){
-    branch_graph = new BranchGraph($("#holder"), {
-      url: '#{project_graph_path(@project, @ref, q: @q, format: :json)}',
-      commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}',
-      ref: '#{@ref}',
-      commit_id: '#{@commit.id}'
-    });
+
+  branch_graph = new BranchGraph($("#holder"), {
+    url: '#{project_graph_path(@project, @ref, q: @q, format: :json)}',
+    commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}',
+    ref: '#{@ref}',
+    commit_id: '#{@commit.id}'
   });
diff --git a/app/views/layouts/project_resource.html.haml b/app/views/layouts/project_resource.html.haml
index f6c5b166ed2..1fc36410668 100644
--- a/app/views/layouts/project_resource.html.haml
+++ b/app/views/layouts/project_resource.html.haml
@@ -1,7 +1,7 @@
 !!! 5
 %html{ lang: "en"}
   = render "layouts/head", title: @project.name_with_namespace
-  %body{class: "#{app_theme} project", :'data-page' => body_data_page}
+  %body{class: "#{app_theme} project", :'data-page' => body_data_page, :'data-project-id' => @project.id }
     = render "layouts/head_panel", title: project_title(@project)
     = render "layouts/flash"
     - if can?(current_user, :download_code, @project)
diff --git a/app/views/merge_requests/_show.html.haml b/app/views/merge_requests/_show.html.haml
index 08b80172645..d6e00ca9b8b 100644
--- a/app/views/merge_requests/_show.html.haml
+++ b/app/views/merge_requests/_show.html.haml
@@ -26,14 +26,12 @@
 
 :javascript
   var merge_request;
-  $(function(){
-    merge_request = new MergeRequest({
-      url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
-      check_enable: #{@merge_request.unchecked? ? "true" : "false"},
-      url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}",
-      ci_enable: #{@project.gitlab_ci? ? "true" : "false"},
-      current_status: "#{@merge_request.merge_status_name}",
-      action: "#{controller.action_name}"
-    });
-  });
 
+  merge_request = new MergeRequest({
+    url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
+    check_enable: #{@merge_request.unchecked? ? "true" : "false"},
+    url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}",
+    ci_enable: #{@project.gitlab_ci? ? "true" : "false"},
+    current_status: "#{@merge_request.merge_status_name}",
+    action: "#{controller.action_name}"
+  });
diff --git a/app/views/walls/show.html.haml b/app/views/walls/show.html.haml
index 139e66f5dd0..88aecee0815 100644
--- a/app/views/walls/show.html.haml
+++ b/app/views/walls/show.html.haml
@@ -21,8 +21,3 @@
 
           .hint.pull-right CTRL + Enter to send message
         .clearfix
-
-:javascript
-  $(function(){
-    Wall.init(#{@project.id});
-  });
diff --git a/app/views/wikis/_new.html.haml b/app/views/wikis/_new.html.haml
index bc1635eb174..ca8e7c1b4b4 100644
--- a/app/views/wikis/_new.html.haml
+++ b/app/views/wikis/_new.html.haml
@@ -5,27 +5,8 @@
   .modal-body
     = label_tag :new_wiki_path do
       %span Page slug
-    = text_field_tag :new_wiki_path, nil, placeholder: 'how-to-setup', class: 'input-xlarge', required: true
+    = text_field_tag :new_wiki_path, nil, placeholder: 'how-to-setup', class: 'input-xlarge', required: true, :'data-wikis-path' => project_wikis_path(@project)
     %p.hint
       Please dont use spaces and slashes
   .modal-footer
     = link_to 'Build', '#', class: 'build-new-wiki btn btn-create'
-
-:javascript
-  $(function(){
-    var modal = $('#modal-new-wiki').modal({modal: true, show:false});
-    $('.add-new-wiki').bind("click", function(){
-      modal.show();
-    });
-    $('.build-new-wiki').bind("click", function(){
-      var slug = $('#new_wiki_path').val();
-
-      if(slug.length > 0) {
-        location.href = "#{project_wikis_path(@project)}/" + slug;
-      }
-    });
-    $('.modal-header .close').bind("click", function(){
-      modal.hide();
-    })
-  })
-
-- 
GitLab