Mercurial Hosting > dad
comparison 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 |
comparison
equal
deleted
inserted
replaced
19:dac260018e2e | 20:0b3376e13e22 |
---|---|
1 <!doctype html> | |
2 <html> | |
3 <head> | |
4 <meta name="viewport" content="width=device-width, initial-scale=1"> | |
5 <style> | |
6 @import "/site.css"; | |
7 @import "/dad.css"; | |
8 | |
9 [drop] { | |
10 margin-top: 8px; | |
11 margin-bottom: 8px; | |
12 } | |
13 [drag] { | |
14 background-color: LightGreen; | |
15 padding: 8px; | |
16 display: inline-block; | |
17 } | |
18 </style> | |
19 <script src="/dad.js"></script> | |
20 <script> | |
21 function indexOf(a,el) { | |
22 for( let i=0; i<a.length; i++ ) { | |
23 if( a[i] === el ) | |
24 return i; | |
25 } | |
26 return -1; | |
27 } | |
28 | |
29 dad.whatToDrag = function(draggable) { | |
30 return draggable.parentNode; | |
31 }; | |
32 | |
33 dad.onEnter = function(event) { | |
34 let dropzone = event.dropzone; | |
35 let original = event.original; | |
36 let filter = original.getAttribute('drop'); | |
37 if( dropzone.getAttribute('drop') !== filter ) { | |
38 return false; | |
39 } | |
40 let items = document.querySelectorAll(`[drop="${filter}"]`); | |
41 let iDropzone = indexOf(items,dropzone); | |
42 let iOriginal = indexOf(items,original); | |
43 let where = iDropzone < iOriginal ? 'beforebegin' : 'afterend'; | |
44 dropzone.insertAdjacentElement(where,original); | |
45 }; | |
46 | |
47 function init() { | |
48 let items = document.querySelectorAll('[drop]'); | |
49 for( let item of items ) { | |
50 dad.setDropzone(item); | |
51 let filter = item.getAttribute('drop'); | |
52 let drag = item.querySelector(`[drag="${filter}"]`); | |
53 dad.setDraggable(drag); | |
54 } | |
55 } | |
56 </script> | |
57 </head> | |
58 <body> | |
59 <h1>Nested Dynamic Lists</h1> | |
60 <ul> | |
61 <script> | |
62 for( let i=1; i<=5; i++ ) { | |
63 document.write(` | |
64 <li drop="top">${i} - <span drag=top>drag me</span> | |
65 <ul> | |
66 ` ); | |
67 for( let j=1; j<=i; j++ ) { | |
68 document.write(` | |
69 <li drop="n${i}">${j} - <span drag="n${i}">drag me</span> | |
70 ` ); | |
71 } | |
72 document.write(` | |
73 </ul> | |
74 </li> | |
75 ` ); | |
76 } | |
77 </script> | |
78 </ul> | |
79 <p>bottom</p> | |
80 </body> | |
81 <script> init(); </script> | |
82 </html> |