Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 3667

Show
Ignore:
Timestamp:
02/26/06 14:20:21 (3 years ago)
Author:
madrobby
Message:

Added script.aculo.us drag and drop helpers to RJS [Thomas Fuchs]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionpack/CHANGELOG

    r3661 r3667  
    11*SVN* 
     2 
     3* Added script.aculo.us drag and drop helpers to RJS [Thomas Fuchs]. Examples: 
     4 
     5    page.draggable 'product-1' 
     6    page.drop_receiving 'wastebasket', :url => { :action => 'delete' } 
     7    page.sortable 'todolist', :url => { action => 'change_order' } 
    28 
    39* Fixed that form elements would strip the trailing [] from the first parameter #3545 [ruby@bobsilva.com] 
  • trunk/actionpack/lib/action_view/helpers/prototype_helper.rb

    r3592 r3667  
    566566        end 
    567567         
    568         # Starts a Scriptaculous visual effect. See  
     568        # Starts a script.aculo.us visual effect. See  
    569569        # ActionView::Helpers::ScriptaculousHelper for more information. 
    570570        def visual_effect(name, id, options = {}) 
    571571          record @context.send(:visual_effect, name, id, options) 
     572        end 
     573         
     574        # Creates a script.aculo.us sortable element. Useful 
     575        # to recreate sortable elements after items get added 
     576        # or deleted. 
     577        # See ActionView::Helpers::ScriptaculousHelper for more information. 
     578        def sortable(id, options = {}) 
     579          record @context.send(:sortable_element_js, id, options) 
     580        end 
     581         
     582        # Creates a script.aculo.us draggable element. 
     583        # See ActionView::Helpers::ScriptaculousHelper for more information. 
     584        def draggable(id, options = {}) 
     585          record @context.send(:draggable_element_js, id, options) 
     586        end 
     587         
     588        # Creates a script.aculo.us drop receiving element. 
     589        # See ActionView::Helpers::ScriptaculousHelper for more information. 
     590        def drop_receiving(id, options = {}) 
     591          record @context.send(:drop_receiving_element_js, id, options) 
    572592        end 
    573593         
  • trunk/actionpack/lib/action_view/helpers/scriptaculous_helper.rb

    r3476 r3667  
    6868      # http://script.aculo.us for more documentation. 
    6969      def sortable_element(element_id, options = {}) 
     70        javascript_tag(sortable_element_js(element_id, options).chop!) 
     71      end 
     72       
     73      def sortable_element_js(element_id, options = {}) #:nodoc: 
    7074        options[:with]     ||= "Sortable.serialize('#{element_id}')" 
    7175        options[:onUpdate] ||= "function(){" + remote_function(options) + "}" 
     
    7983        options[:only] = array_or_string_for_javascript(options[:only]) if options[:only] 
    8084   
    81         javascript_tag("Sortable.create('#{element_id}', #{options_for_javascript(options)})"
     85        %(Sortable.create('#{element_id}', #{options_for_javascript(options)});
    8286      end 
    8387 
     
    8892      #  
    8993      # You can change the behaviour with various options, see 
    90       # http://script.aculo.us for more documentation.  
     94      # http://script.aculo.us for more documentation. 
    9195      def draggable_element(element_id, options = {}) 
    92         javascript_tag("new Draggable('#{element_id}', #{options_for_javascript(options)})") 
     96        javascript_tag(draggable_element_js(element_id, options).chop!) 
     97      end 
     98       
     99      def draggable_element_js(element_id, options = {}) #:nodoc: 
     100        %(new Draggable('#{element_id}', #{options_for_javascript(options)});) 
    93101      end 
    94102 
     
    105113      # http://script.aculo.us for more documentation. 
    106114      def drop_receiving_element(element_id, options = {}) 
     115        javascript_tag(drop_receiving_element_js(element_id, options).chop!) 
     116      end 
     117       
     118      def drop_receiving_element_js(element_id, options = {}) #:nodoc: 
    107119        options[:with]     ||= "'id=' + encodeURIComponent(element.id)" 
    108120        options[:onDrop]   ||= "function(element){" + remote_function(options) + "}" 
    109121        options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) } 
    110    
     122 
    111123        options[:accept] = array_or_string_for_javascript(options[:accept]) if options[:accept]     
    112124        options[:hoverclass] = "'#{options[:hoverclass]}'" if options[:hoverclass] 
    113    
    114         javascript_tag("Droppables.add('#{element_id}', #{options_for_javascript(options)})"
     125         
     126        %(Droppables.add('#{element_id}', #{options_for_javascript(options)});
    115127      end 
    116128    end 
  • trunk/actionpack/test/template/prototype_helper_test.rb

    r3591 r3667  
    44  include ActionView::Helpers::JavaScriptHelper 
    55  include ActionView::Helpers::PrototypeHelper 
     6  include ActionView::Helpers::ScriptaculousHelper 
    67   
    78  include ActionView::Helpers::UrlHelper 
     
    256257    assert_equal %($$('p.welcome b').first().hide();), @generator.to_s 
    257258  end 
     259   
     260  def test_visual_effect 
     261    assert_equal %(new Effect.Puff('blah',{});),  
     262      @generator.visual_effect(:puff,'blah') 
     263  end  
     264   
     265  def test_visual_effect_toggle 
     266    assert_equal %(Effect.toggle('blah','appear',{});),  
     267      @generator.visual_effect(:toggle_appear,'blah') 
     268  end 
     269   
     270  def test_sortable 
     271    assert_equal %(Sortable.create('blah', {onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize('blah')})}});),  
     272      @generator.sortable('blah', :url => { :action => "order" }) 
     273  end 
     274   
     275  def test_draggable 
     276    assert_equal %(new Draggable('blah', {});),  
     277      @generator.draggable('blah') 
     278  end 
     279   
     280  def test_drop_receiving 
     281    assert_equal %(Droppables.add('blah', {onDrop:function(element){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}});),  
     282      @generator.drop_receiving('blah', :url => { :action => "order" }) 
     283  end 
    258284end