This one''s kicking me in the *(&#^. All I want to do is create a
draggable
item and then detect the coordinates where it is dropped. So my first
approach was to just use the draggable_element with :revert => false, like
so:
<%= draggable_element "my_element", :revert => false %>
That works great and lets me drag stuff all over the place. In the
scriptaculous docs it states that revert can be set to a function. I tried
that with something like:
<%= draggable_element "my_element", :revert => remote_function(
:url => {
:action => drag_end }) %>
That may not be exact but you get the idea. Well that called my drag_end
method, but it seemed to be calling it multiple times, even when not
triggered. It also didn''t give me any information on the draggable
element.
I even tried it with :snap which should pass in x and y, but no luck
I took another approach and created a droppable area. Doing something like:
<%= drop_receiving_element "my_page",
:url => { :action => "drag_end" }
%>
Well that works in giving me the id of the draggable element, but I still
can''t figure out how to get the x and y coordinates of the item at its
drop
location. The information is in there, and using straight javascript it
would be possible to use the onDrop function accessing the element.x /
element.y information, but I would prefer to have it callback to the
controller and do it there. (BTW, I spent forever seeing if I could create
a callback but it doesn''t appear to be supported by the drag / drop
stuff,
but I could be missing something.)
Any help would be greatly appreciated.
Michael Trier
_______________________________________________
Rails mailing list
Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
http://lists.rubyonrails.org/mailman/listinfo/rails
Michael Trier wrote:> <%= draggable_element "my_element", :revert => remote_function( :url => > { > :action => drag_end }) %>What about changing the above to: <%= draggable_element "my_element", :revert => remote_function( :url => { :action => drag_end, :x=> element.x, :y=>element.y }) %> I on''t think that will work, but something similiar should. -- Posted via http://www.ruby-forum.com/.
Michael Trier
2005-Dec-31 05:24 UTC
[Rails] Re: AJAX Drag and Drop Detecting Drop Coordinates
The following staight js code does what I need:
Droppables.add(''my_page'', {onDrop:function(element){new
Ajax.Request(''/my_controller/move_it'',
{asynchronous:true, evalScripts:true, parameters:''id='' +
encodeURIComponent(
element.id) + ''&x='' +
encodeURIComponent(element.style.left) + ''&y='' +
encodeURIComponent(element.style.top) })}})
Anyone know how to translate this into a drop_receiving_element method?
I''ve tried every which way I could think of. The solution probably has
to
do with the :with option, but I can not make it work.
Michael Trier
On 12/30/05, joey__ <cardologist@gmail.com> wrote:>
> Michael Trier wrote:
> > <%= draggable_element "my_element", :revert =>
remote_function( :url =>
> > {
> > :action => drag_end }) %>
> What about changing the above to:
> <%= draggable_element "my_element", :revert =>
remote_function( :url =>
> {
> :action => drag_end, :x=> element.x, :y=>element.y }) %>
> I on''t think that will work, but something similiar should.
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Rails mailing list
> Rails@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://wrath.rubyonrails.org/pipermail/rails/attachments/20051231/181cebe8/attachment.html
michael lascarides
2006-Jan-16 14:52 UTC
[Rails] Re: AJAX Drag and Drop Detecting Drop Coordinates
Michael,> Anyone know how to translate this into a drop_receiving_element method? > > I''ve tried every which way I could think of. The solution probably has > to > do with the :with option, but I can not make it work.I am making an editable photo gallery layout, and after an all-nighter wrestling with the same issue, I found a solution. It is indeed the :with option. Just take the "parameters:" bit out of your .js and move them to the :with parameter. Here is my resulting drop_receiving_element code (broken on to several lines for legibility): <%= drop_receiving_element("gallery", :url => { :action => "reposition" }, :loading => visual_effect(:highlight), :update => ''admin_status_message'', :with => "''id='' + encodeURIComponent(element.id) + ''&x='' + encodeURIComponent(Element.getStyle(element,''left'')) + ''&y='' + encodeURIComponent(Element.getStyle(element,''top'')) + ''&w='' + encodeURIComponent(Element.getStyle(element,''width'')) + ''&h='' + encodeURIComponent(Element.getStyle(element,''height''))") %> Note one twist... "element.style.top" syntax doesn''t work here, so I switched it for "Element.getStyle(element,''top'')" syntax instead. Must be a scope issue, but I am too tired to dig into it further. This code sends the following parameters to the ''reposition'' action (output of debug(params) shown): w: 100px x: 0px y: 50px action: reposition id: foto_1 controller: admin h: 105px Thanks for the hint on the :with option, without which I would not have found it. Hope this helps! - Michael L. -- Posted via http://www.ruby-forum.com/.
Michael Trier
2006-Jan-16 15:13 UTC
[Rails] Re: AJAX Drag and Drop Detecting Drop Coordinates
On 1/16/06, michael lascarides <michael@electrotone.com> wrote:> > > Michael, > > > Anyone know how to translate this into a drop_receiving_element method? > > > > I''ve tried every which way I could think of. The solution probably has > > to > > do with the :with option, but I can not make it work. > > I am making an editable photo gallery layout, and after an all-nighter > wrestling with the same issue, I found a solution. It is indeed the > :with option. Just take the "parameters:" bit out of your .js and move > them to the :with parameter. Here is my resulting drop_receiving_element > code (broken on to several lines for legibility): > > <%= drop_receiving_element("gallery", > :url => { :action => "reposition" }, > :loading => visual_effect(:highlight), > :update => ''admin_status_message'', > :with => "''id='' + encodeURIComponent(element.id) > + ''&x='' + encodeURIComponent(Element.getStyle(element,''left'')) > + ''&y='' + encodeURIComponent(Element.getStyle(element,''top'')) > + ''&w='' + encodeURIComponent(Element.getStyle(element,''width'')) > + ''&h='' + encodeURIComponent(Element.getStyle(element,''height''))") %> > > Note one twist... "element.style.top" syntax doesn''t work here, so I > switched it for "Element.getStyle(element,''top'')" syntax instead. Must > be a scope issue, but I am too tired to dig into it further. > > This code sends the following parameters to the ''reposition'' action > (output of debug(params) shown): > > w: 100px > x: 0px > y: 50px > action: reposition > id: foto_1 > controller: admin > h: 105px > > Thanks for the hint on the :with option, without which I would not have > found it. Hope this helps! > > - Michael L. > > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >Ahh, you''re a genius. This line is the trick: encodeURIComponent(Element.getStyle(element,''left'')) I was trying, like you, to access it directly and was getting nowhere. I ended up getting an implementation in place, but I just fell back to the straight JavaScript (using Scriptaculous) for those elements. Thanks so much. Michael Trier -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060116/83b68859/attachment-0001.html