- var target = e.getTarget();
- while ((target !== null) && (target.parentNode != this.bodyEl.dom)) {
- target = target.parentNode;
- }
- //Roo.log([ 'target' , target ? target.id : '--nothing--']);
- // see if target is one of the 'cards'...
- var ctarget = false;
- var cards = [];
- //Roo.log(this.items.length);
- var lpos = pos = false;
- for (var i = 0;i< this.items.length;i++) {
-
- if (!this.items[i].el.hasClass('card')) {
- continue;
- }
- pos = this.getDropPoint(e, this.items[i].el.dom);
-
- //Roo.log(this.items[i].el.dom.id);
- cards.push(this.items[i]);
- if (pos == 'above') {
- ctarget = this.items[i > 0 ? i-1 : 0];
- pos = i > 0 ? 'below' : pos;
- break;
- }
- }
-
- if (!ctarget) {
- ctarget = cards[cards.length-1] || this.el.dom;
- pos = 'below'
- }
-
-
- //Roo.log(['getTargetFromEvent', ctarget]);
- return [ ctarget, pos ];
+ var target = e.getTarget();
+ while ((target !== null) && (target.parentNode != this.bodyEl.dom)) {
+ target = target.parentNode;
+ }
+ //Roo.log([ 'target' , target ? target.id : '--nothing--']);
+ // see if target is one of the 'cards'...
+ var ctarget = -1;
+ var cards = [];
+ //Roo.log(this.items.length);
+ var lpos = pos = cpos = false;
+ for (var i = 0;i< this.items.length;i++) {
+
+ if (!this.items[i].el.hasClass('card')) {
+ continue;
+ }
+ pos = this.getDropPoint(e, this.items[i].el.dom);
+
+ //Roo.log(this.items[i].el.dom.id);
+ cards.push(this.items[i]);
+ if (ctarget < 0 && pos == 'above') {
+ ctarget = i > 0 ? i - 1 : 0;
+ cpos = i > 0 ? 'below' : pos;
+ }
+ }
+ if (!cards.length) {
+ return [ true, 'below' ];
+ }
+
+ if (ctarget < 0) {
+ ctarget = cards.length -1;
+ cpos = 'below';
+ }
+ if (cards[ctarget].el == dragged_card_el) {
+ return false;
+ }
+
+ if (cpos == 'below') {
+ var card_after = ctarget+1 == cards.length ? false : cards[ctarget+1];
+
+ // then above should not be dragged_card_el.
+ // and ctarget sho
+
+ if (card_after && card_after.el == dragged_card_el) {
+ return false;
+ }
+ return [ cards[ctarget], cpos ];
+ }
+
+ // its's after ..
+ var card_before = ctarget > 0 ? cards[ctarget-1] : false;
+
+
+ if (card_before && card_before.el == dragged_card_el) {
+ return false;
+ }
+
+ return [ cards[ctarget], cpos ];