]> source.dussan.org Git - redmine.git/commitdiff
Use a modal form to create a category from the issue form.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 24 May 2012 17:31:53 +0000 (17:31 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 24 May 2012 17:31:53 +0000 (17:31 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9707 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/issue_categories_controller.rb
app/views/issue_categories/_new_modal.html.erb [new file with mode: 0644]
app/views/issues/_attributes.html.erb
test/functional/issue_categories_controller_test.rb

index 81928ff537ffee3b3cf6a81b19a0cbaf70ccbe2e..36a22b32474485677cdeb30339d8fefe5b5efbbd 100644 (file)
@@ -41,6 +41,17 @@ class IssueCategoriesController < ApplicationController
   def new
     @category = @project.issue_categories.build
     @category.safe_attributes = params[:issue_category]
+
+    respond_to do |format|
+      format.html
+      format.js do
+        render :update do |page|
+          page.replace_html 'ajax-modal', :partial => 'issue_categories/new_modal'
+          page << "showModal('ajax-modal', '600px');"
+          page << "Form.Element.focus('issue_category_name');"
+        end
+      end
+    end
   end
 
   def create
@@ -53,9 +64,11 @@ class IssueCategoriesController < ApplicationController
           redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project
         end
         format.js do
-          # IE doesn't support the replace_html rjs method for select box options
-          render(:update) {|page| page.replace "issue_category_id",
-            content_tag('select', content_tag('option') + options_from_collection_for_select(@project.issue_categories, 'id', 'name', @category.id), :id => 'issue_category_id', :name => 'issue[category_id]')
+          render(:update) {|page| 
+            page << 'hideModal();'
+            # IE doesn't support the replace_html rjs method for select box options
+            page.replace "issue_category_id",
+              content_tag('select', content_tag('option') + options_from_collection_for_select(@project.issue_categories, 'id', 'name', @category.id), :id => 'issue_category_id', :name => 'issue[category_id]')
           }
         end
         format.api { render :action => 'show', :status => :created, :location => issue_category_path(@category) }
@@ -64,7 +77,10 @@ class IssueCategoriesController < ApplicationController
       respond_to do |format|
         format.html { render :action => 'new'}
         format.js do
-          render(:update) {|page| page.alert(@category.errors.full_messages.join('\n')) }
+          render :update do |page|
+            page.replace_html 'ajax-modal', :partial => 'issue_categories/new_modal'
+            page << "Form.Element.focus('version_name');"
+          end
         end
         format.api { render_validation_errors(@category) }
       end
diff --git a/app/views/issue_categories/_new_modal.html.erb b/app/views/issue_categories/_new_modal.html.erb
new file mode 100644 (file)
index 0000000..4023911
--- /dev/null
@@ -0,0 +1,9 @@
+<h3 class="title"><%=l(:label_issue_category_new)%></h3>
+
+<%= labelled_remote_form_for @category, :as => 'issue_category', :url => project_issue_categories_path(@project) do |f| %>
+<%= render :partial => 'issue_categories/form', :locals => { :f => f } %>
+  <p class="buttons">
+    <%= submit_tag l(:button_create), :name => nil %>
+    <%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
+  </p>
+<% end %>
index c65735ae4b27fb24df3d4f7e4422506d9be29fe4..0bec5316334944ebe74c95a5f151adc820529df4 100644 (file)
 
 <% if @issue.safe_attribute?('category_id') && @issue.project.issue_categories.any? %>
 <p><%= f.select :category_id, (@issue.project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
-<%= prompt_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'),
-                     l(:label_issue_category_new),
-                     'issue_category[name]',
-                     {:controller => 'issue_categories', :action => 'create', :project_id => @issue.project},
-                     :title => l(:label_issue_category_new),
-                     :tabindex => 199) if User.current.allowed_to?(:manage_categories, @issue.project) %></p>
+<%= link_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'),
+                   {:url => new_project_issue_category_path(@issue.project), :method => 'get'},
+                   :title => l(:label_issue_category_new),
+                   :tabindex => 200) if User.current.allowed_to?(:manage_categories, @issue.project) %></p>
 <% end %>
 
 <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %>
index d76746ac59d5d171a7dfb9c38a648fc58b65e3f6..5c9e6c9dcac083e70761368c640d9b04300f325f 100644 (file)
@@ -79,7 +79,9 @@ class IssueCategoriesControllerTest < ActionController::TestCase
     end
 
     assert_response :success
-    assert_match /alert/, @response.body
+    assert_select_rjs :replace_html, "ajax-modal" do
+      assert_select "div#errorExplanation"
+    end
   end
 
   def test_edit