From a5b439544aeb15d86dc45c81315d5d407bb38512 Mon Sep 17 00:00:00 2001
From: Gregor Schmidt <ruby@schmidtwisser.de>
Date: Tue, 17 May 2011 19:51:17 +0200
Subject: [PATCH] [#416] introducing separate rjs view to reduce controller
 code

---
 app/controllers/watchers_controller.rb   | 40 ++++++------------------
 app/views/watchers/replace_selectors.rjs | 22 +++++++++++++
 2 files changed, 32 insertions(+), 30 deletions(-)
 create mode 100644 app/views/watchers/replace_selectors.rjs

diff --git a/app/controllers/watchers_controller.rb b/app/controllers/watchers_controller.rb
index 617b92da8..1efa91f09 100644
--- a/app/controllers/watchers_controller.rb
+++ b/app/controllers/watchers_controller.rb
@@ -76,42 +76,22 @@ private
   
   def set_watcher(user, watching)
     @watched.set_watcher(user, watching)
-    if params[:replace].present?
-      if params[:replace].is_a? Array
-        replace_selectors = params[:replace]
-      else
-        replace_selectors = params[:replace].split(',').map(&:strip)
-      end
-    else
-      replace_selectors = ['#watcher']
-    end
 
     respond_to do |format|
       format.html { redirect_to :back }
       format.js do
-        render(:update) do |page|
-          replace_selectors.each do |selector|
-            next if selector.blank?
-
-            case selector
-            when '#watchers'
-              page.replace_html 'watchers', :partial => 'watchers/watchers', :locals => {:watched => @watched}
-            else
-              page.select(selector).each do |node|
-                options = {:replace => replace_selectors}
-
-                last_selector = selector.split(' ').last
-                if last_selector.starts_with? '.'
-                  options[:class] = last_selector[1..-1]
-                elsif last_selector.starts_with? '#'
-                  options[:id] = last_selector[1..-1]
-                end
-
-                node.replace watcher_link(@watched, user, options)
-              end
-            end
+        if params[:replace].present?
+          if params[:replace].is_a? Array
+            @replace_selectors = params[:replace]
+          else
+            @replace_selectors = params[:replace].split(',').map(&:strip)
           end
+        else
+          @replace_selectors = ['#watcher']
         end
+        @user = user
+
+        render :action => 'replace_selectors'
       end
     end
   rescue ::ActionController::RedirectBackError
diff --git a/app/views/watchers/replace_selectors.rjs b/app/views/watchers/replace_selectors.rjs
new file mode 100644
index 000000000..ae3b7ccdc
--- /dev/null
+++ b/app/views/watchers/replace_selectors.rjs
@@ -0,0 +1,22 @@
+@replace_selectors.each do |selector|
+  next if selector.blank?
+
+  case selector
+  when '#watchers'
+    page.replace_html 'watchers', :partial => 'watchers/watchers', :locals => {:watched => @watched}
+  else
+    page.select(selector).each do |node|
+      options = {:replace => @replace_selectors}
+
+      last_selector = selector.split(' ').last
+      if last_selector.starts_with? '.'
+        options[:class] = last_selector[1..-1]
+      elsif last_selector.starts_with? '#'
+        options[:id] = last_selector[1..-1]
+      end
+
+      node.replace watcher_link(@watched, @user, options)
+    end
+  end
+end
+
-- 
GitLab