Mercurial Hosting > dad
view src/examples/nested.html @ 20:0b3376e13e22 default tip
add nested example
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 18 Feb 2025 17:23:17 -0700 |
parents | src/examples/list2.html@969d5980b375 |
children |
line wrap: on
line source
<!doctype html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> @import "/site.css"; @import "/dad.css"; [drop] { margin-top: 8px; margin-bottom: 8px; } [drag] { background-color: LightGreen; padding: 8px; display: inline-block; } </style> <script src="/dad.js"></script> <script> function indexOf(a,el) { for( let i=0; i<a.length; i++ ) { if( a[i] === el ) return i; } return -1; } dad.whatToDrag = function(draggable) { return draggable.parentNode; }; dad.onEnter = function(event) { let dropzone = event.dropzone; let original = event.original; let filter = original.getAttribute('drop'); if( dropzone.getAttribute('drop') !== filter ) { return false; } let items = document.querySelectorAll(`[drop="${filter}"]`); let iDropzone = indexOf(items,dropzone); let iOriginal = indexOf(items,original); let where = iDropzone < iOriginal ? 'beforebegin' : 'afterend'; dropzone.insertAdjacentElement(where,original); }; function init() { let items = document.querySelectorAll('[drop]'); for( let item of items ) { dad.setDropzone(item); let filter = item.getAttribute('drop'); let drag = item.querySelector(`[drag="${filter}"]`); dad.setDraggable(drag); } } </script> </head> <body> <h1>Nested Dynamic Lists</h1> <ul> <script> for( let i=1; i<=5; i++ ) { document.write(` <li drop="top">${i} - <span drag=top>drag me</span> <ul> ` ); for( let j=1; j<=i; j++ ) { document.write(` <li drop="n${i}">${j} - <span drag="n${i}">drag me</span> ` ); } document.write(` </ul> </li> ` ); } </script> </ul> <p>bottom</p> </body> <script> init(); </script> </html>