Skip to content

Commit d680bce

Browse files
authored
Fixed an issue dropping with out placeholder (#736)
#456 Fixes #456
1 parent 908e0df commit d680bce

2 files changed

Lines changed: 63 additions & 5 deletions

File tree

__tests__/events/events.test.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,59 @@ describe('Testing events', () => {
173173
expect(event.dataTransfer.dropEffect).toBe(undefined)
174174
})
175175

176+
test('should correctly drop item in place without placeholder', () => {
177+
jest.useFakeTimers()
178+
179+
const placeholder = document.createElement('DIV')
180+
sortable(ul, {
181+
items: 'li',
182+
copy: true,
183+
acceptFrom: false,
184+
placeholderClass: 'test-placeholder'
185+
})
186+
187+
sortable(ul2, {
188+
items: 'li',
189+
acceptFrom: 'ul',
190+
placeholder,
191+
placeholderClass: 'test-placeholder2'
192+
})
193+
194+
let childcount = ul.children.length
195+
196+
let event = new CustomEvent('dragstart')
197+
event.dataTransfer = dataTransferObj
198+
Object.defineProperty(event, 'target', {value: li, enumerable: true})
199+
ul.dispatchEvent(event)
200+
201+
event = new CustomEvent('dragover')
202+
event.dataTransfer = dataTransferObj
203+
fifthLi.dispatchEvent(event)
204+
jest.advanceTimersByTime(1)
205+
expect(getIndex(placeholder, ul2.children)).not.toEqual(-1)
206+
expect(ul.children.length).toEqual(childcount + 1)
207+
208+
event = new CustomEvent('drop')
209+
ul2.dispatchEvent(event)
210+
expect(ul.children.length).toEqual(childcount)
211+
212+
event = new CustomEvent('dragstart')
213+
event.dataTransfer = dataTransferObj
214+
Object.defineProperty(event, 'target', {value: li, enumerable: true})
215+
ul.dispatchEvent(event)
216+
217+
event = new CustomEvent('dragover')
218+
event.dataTransfer = dataTransferObj
219+
ul2.dispatchEvent(event)
220+
jest.advanceTimersByTime(1)
221+
expect(getIndex(placeholder, ul2.children)).toEqual(-1)
222+
expect(ul.children.length).toEqual(childcount + 1)
223+
224+
event = new CustomEvent('drop')
225+
ul2.dispatchEvent(event)
226+
expect(ul.children.length).toEqual(childcount + 1)
227+
})
228+
176229
test.skip('should correctly place moved item into correct index', () => {
177230
sortable(ul, {
178231
items: 'li',

src/html5sortable.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -475,11 +475,16 @@ export default function sortable (sortableElements, options: configuration|objec
475475
.filter(placeholder => placeholder instanceof HTMLElement)
476476
// only elements in DOM
477477
.filter(isInDom)[0]
478-
// attach element after placeholder
479-
after(visiblePlaceholder, dragging)
480-
// remove placeholder from dom
481-
visiblePlaceholder.remove()
482-
478+
if (visiblePlaceholder) {
479+
// attach element after placeholder
480+
after(visiblePlaceholder, dragging)
481+
// remove placeholder from dom
482+
visiblePlaceholder.remove()
483+
} else {
484+
// set the dropped value to 'false' to delete copied dragging at the time of 'dragend'
485+
data(dragging, 'dropped', 'false')
486+
return
487+
}
483488
/*
484489
* Fires Custom Event - 'sortstop'
485490
*/

0 commit comments

Comments
 (0)