From: Dmitriy Zaporozhets Date: Sun, 7 Apr 2013 10:19:36 +0000 (+0300) Subject: refactor Issues.js. Remove unused actions. Respect filters while searching for issue X-Git-Tag: v5.1.0~82 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e0df75de3fbe640528e2b327a387e4ebce442055;p=wvm%2Fgitlab.git refactor Issues.js. Remove unused actions. Respect filters while searching for issue --- diff --git a/app/assets/javascripts/issues.js b/app/assets/javascripts/issues.js deleted file mode 100644 index 852402227..000000000 --- a/app/assets/javascripts/issues.js +++ /dev/null @@ -1,80 +0,0 @@ -function initIssuesSearch() { - var href = $('#issue_search_form').attr('action'); - var last_terms = ''; - - $('#issue_search').keyup(function() { - var terms = $(this).val(); - var milestone_id = $('#milestone_id').val(); - var status = $('#status').val(); - - if (terms != last_terms) { - last_terms = terms; - - if (terms.length >= 2 || terms.length == 0) { - $.get(href, { 'status': status, 'terms': terms, 'milestone_id': milestone_id }, function(response) { - $('.issues-holder').html(response); - }); - } - } - }); -} - -/** - * Init issues page - * - */ -function issuesPage(){ - initIssuesSearch(); - $("#update_status").chosen(); - $("#update_assignee_id").chosen(); - $("#update_milestone_id").chosen(); - - $("#label_name").chosen(); - $("#assignee_id").chosen(); - $("#milestone_id").chosen(); - $("#milestone_id, #assignee_id, #label_name").on("change", function(){ - $(this).closest("form").submit(); - }); - - $('body').on('ajax:success', '.close_issue, .reopen_issue', function(){ - var t = $(this), - totalIssues, - reopen = t.hasClass('reopen_issue'); - $('.issue_counter').each(function(){ - var issue = $(this); - totalIssues = parseInt( $(this).html(), 10 ); - - if( reopen && issue.closest('.main_menu').length ){ - $(this).html( totalIssues+1 ); - }else { - $(this).html( totalIssues-1 ); - } - }); - - }); - - $(".check_all_issues").click(function () { - $('.selected_issue').attr('checked', this.checked); - issuesCheckChanged(); - }); - - $('.selected_issue').bind('change', issuesCheckChanged); -} - -function issuesCheckChanged() { - var checked_issues = $('.selected_issue:checked'); - - if(checked_issues.length > 0) { - var ids = [] - $.each(checked_issues, function(index, value) { - ids.push($(value).attr("data-id")); - }) - $('#update_issues_ids').val(ids); - $('.issues_filters').hide(); - $('.issues_bulk_update').show(); - } else { - $('#update_issues_ids').val([]); - $('.issues_bulk_update').hide(); - $('.issues_filters').show(); - } -} diff --git a/app/assets/javascripts/issues.js.coffee b/app/assets/javascripts/issues.js.coffee new file mode 100644 index 000000000..25e44242c --- /dev/null +++ b/app/assets/javascripts/issues.js.coffee @@ -0,0 +1,69 @@ +@Issues = + init: -> + Issues.initSearch() + Issues.initSelects() + + $("body").on "ajax:success", ".close_issue, .reopen_issue", -> + t = $(this) + totalIssues = undefined + reopen = t.hasClass("reopen_issue") + $(".issue_counter").each -> + issue = $(this) + totalIssues = parseInt($(this).html(), 10) + if reopen and issue.closest(".main_menu").length + $(this).html totalIssues + 1 + else + $(this).html totalIssues - 1 + + + reload: -> + Issues.initSelects() + Issues.initChecks() + $('#filter_issue_search').val($('#issue_search').val()) + + initSelects: -> + $("#update_status").chosen() + $("#update_assignee_id").chosen() + $("#update_milestone_id").chosen() + $("#label_name").chosen() + $("#assignee_id").chosen() + $("#milestone_id").chosen() + $("#milestone_id, #assignee_id, #label_name").on "change", -> + $(this).closest("form").submit() + + initChecks: -> + $(".check_all_issues").click -> + $(".selected_issue").attr "checked", @checked + Issues.checkChanged() + + $(".selected_issue").bind "change", Issues.checkChanged + + + initSearch: -> + form = $("#issue_search_form") + last_terms = "" + $("#issue_search").keyup -> + terms = $(this).val() + unless terms is last_terms + last_terms = terms + if terms.length >= 2 or terms.length is 0 + $('#search_status').val($('#status').val()) + $('#search_assignee_id').val($('#assignee_id').val()) + $('#search_milestone_id').val($('#milestone_id').val()) + $('#search_label_name').val($('#label_name').val()) + form.submit() + + checkChanged: -> + checked_issues = $(".selected_issue:checked") + if checked_issues.length > 0 + ids = [] + $.each checked_issues, (index, value) -> + ids.push $(value).attr("data-id") + + $("#update_issues_ids").val ids + $(".issues_filters").hide() + $(".issues_bulk_update").show() + else + $("#update_issues_ids").val [] + $(".issues_bulk_update").hide() + $(".issues_filters").show() diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 9917d198c..0739e7c78 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -14,7 +14,10 @@ class IssuesController < ProjectResourceController respond_to :js, :html def index + terms = params['issue_search'] + @issues = issues_filtered + @issues = @issues.where("title LIKE ?", "%#{terms}%") if terms.present? @issues = @issues.page(params[:page]).per(20) respond_to do |format| @@ -76,28 +79,6 @@ class IssuesController < ProjectResourceController end end - def sort - return render_404 unless can?(current_user, :admin_issue, @project) - - @issues = @project.issues.where(id: params['issue']) - @issues.each do |issue| - issue.position = params['issue'].index(issue.id.to_s) + 1 - issue.save - end - - render nothing: true - end - - def search - terms = params['terms'] - - @issues = issues_filtered - @issues = @issues.where("title LIKE ?", "%#{terms}%") unless terms.blank? - @issues = @issues.page(params[:page]).per(100) - - render partial: 'issues' - end - def bulk_update result = IssuesBulkUpdateContext.new(project, current_user, params).execute redirect_to :back, notice: "#{result[:count]} issues updated" diff --git a/app/views/issues/_issues.html.haml b/app/views/issues/_issues.html.haml index 217956d72..93fa9da27 100644 --- a/app/views/issues/_issues.html.haml +++ b/app/views/issues/_issues.html.haml @@ -18,6 +18,7 @@ = select_tag(:assignee_id, options_from_collection_for_select([unassigned_filter] + @project.users.all, "id", "name", params[:assignee_id]), prompt: "Assignee") = select_tag(:milestone_id, options_from_collection_for_select([unassigned_filter] + issues_active_milestones, "id", "title", params[:milestone_id]), prompt: "Milestone") = hidden_field_tag :status, params[:status] + = hidden_field_tag :issue_search, params[:status], id: 'filter_issue_search' %ul.well-list.issues-list = render @issues diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index 78b677899..4edc1d9b9 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -9,9 +9,11 @@ = link_to new_project_issue_path(@project, issue: { assignee_id: params[:assignee_id], milestone_id: params[:milestone_id]}), class: "btn btn-primary pull-right", title: "New Issue", id: "new_issue_link" do %i.icon-plus New Issue - = form_tag search_project_issues_path(@project), method: :get, remote: true, id: "issue_search_form", class: 'pull-right' do - = hidden_field_tag :project_id, @project.id, { id: 'project_id' } - = hidden_field_tag :status, params[:status] + = form_tag project_issues_path(@project), method: :get, remote: true, id: "issue_search_form", class: 'pull-right' do + = hidden_field_tag :status, params[:status], id: 'search_status' + = hidden_field_tag :assignee_id, params[:assignee_id], id: 'search_assignee_id' + = hidden_field_tag :milestone_id, params[:milestone_id], id: 'search_milestone_id' + = hidden_field_tag :label_name, params[:label_name], id: 'search_label_name' = search_field_tag :issue_search, nil, { placeholder: 'Search', class: 'issue_search input-xlarge append-right-10 search-text-input' } .clearfix @@ -24,5 +26,5 @@ :javascript $(function(){ - issuesPage(); + Issues.init(); }) diff --git a/app/views/issues/index.js.haml b/app/views/issues/index.js.haml index dc77be13f..1be6a64f5 100644 --- a/app/views/issues/index.js.haml +++ b/app/views/issues/index.js.haml @@ -1,4 +1,4 @@ :plain $('.issues-holder').html("#{escape_javascript(render('issues'))}"); History.replaceState({path: "#{request.url}"}, document.title, "#{request.url}"); - issuesPage(); + Issues.reload(); diff --git a/config/routes.rb b/config/routes.rb index b62d3fe2b..5973a1aff 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -266,9 +266,7 @@ Gitlab::Application.routes.draw do resources :labels, only: [:index] resources :issues, except: [:destroy] do collection do - post :sort post :bulk_update - get :search end end