#283 new
flopin

function Droppables.isAffected returns incorrect value in some cases

Reported by flopin | April 20th, 2010 @ 01:58 AM

Suppose a following HTML snippet:




<li class="item">
    <div class="container">A</div>
</li>
<li class="item">
    <div class="container">B</div>
    <ul>
        <li class="item">
            <div class="container">Ba</div>
        </li>
        <li class="item">
            <div class="container">Bb</div>
        </li>
    </ul>
</li>


Now, lets create Dragable on every item class and droppable on every container class. (Note: An item class, will not be actually dropped into a container class, which would result into invalid DOM, but that is not the point). When we start dragging some of the item, Droppables.show function will be called and will try to create a list of affected drops using isAffected function. In the isAffected is condition (drop.element!=element), which should exclude the element being dragged and also being marked as dropable to be enlisted, but, since the dropable is actually child of the dragable in our case, this function mistakely returns false.

I suggest to fix this problem by adding isParent check to isAffected function:

isAffected: function(point, element, drop) {

return (
  (!Element.isParent(drop.element, element)) &&
  (drop.element!=element) &&
  ((!drop._containers) ||
    this.isContained(element, drop)) &&
  ((!drop.accept) ||
    (Element.classNames(element).detect(
      function(v) { return drop.accept.include(v) } ) )) &&
  Position.within(drop.element, point[0], point[1]) );

},

Comments and changes to this ticket

Please Sign in or create a free account to add a new ticket.

With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.

New-ticket Create new ticket

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile ยป

script.aculo.us is an open-source JavaScript framework for visual effects and interface behaviours.
<br/><b>Source available from github</b>
The Git repository resides at:
<a href="http://github.com/madrobby/scriptaculous">http://github.com/madrobby/scriptaculous</a>
<br/>Check out the current development trunk with:
<code>git clone git://github.com/madrobby/scriptaculous.git</code>
<br/>As <b>script.aculo.us 1.xx is feature-frozen</b>, this development trunk is for <b>bugfixes only</b>.
<br/>New development should happen only for
<b>script.aculo.us 2</b>.
<br/><b>Creating a bug report</b>
When creating a bug report, be sure to include as much relevant information as possible. Post a an example that shows off the problem. Preferably, <b>alter the unit tests</b> and show through either changed or added tests how the expected behavior is not occuring.

People watching this ticket

Pages