// html5 drag and drop reference // http://www.w3.org/html/wg/drafts/html/master/editing.html#dnd var love_drag_id=false; function love_list_drag_start(ev) { ev.stopPropagation(); var target=ev.target; while(!target.id){ target=target.parentNode; } // could look for the class name... var dragHide=document.createElement('ul'); dragHide.setAttribute("id","love_list_draghide"); dragHide.setAttribute("class","love_list"); dragHide.setAttribute("style","width:"+target.offsetWidth+"px"); dragHide.innerHTML='
  • '+target.innerHTML+'
  • '; document.getElementById("love_content").appendChild(dragHide); ev.dataTransfer.setDragImage(dragHide,0,0); target.style.opacity="0.3"; ev.dataTransfer.effectAllowed="move";// not sure what this does ? ev.dataTransfer.setData("text",target.id); love_drag_id=target.id; // because for some asinine reason this data is not available during the drag return false; } function love_list_drag_over(ev) { var data=ev.dataTransfer.getData("text"); ev.preventDefault(); ev.stopPropagation(); var target=ev.target; while(!target.id){ target=target.parentNode; } //console.log("target.id!=data: "+target.id+"!="+data); if(target.id!=love_drag_id) target.classList.add("love_list_dragover"); return false; } function love_list_drag_enter(ev) { ev.stopPropagation(); ev.preventDefault(); /*var data=ev.dataTransfer.getData("text"); var target=ev.target; while(!target.id){ target=target.parentNode; } // could look for the class name... target.classList.add("love_list_dragover");*/ return false; } function love_list_drag_leave(ev) { ev.stopPropagation(); ev.preventDefault(); var target=ev.target; while(!target.id){ target=target.parentNode; } // could look for the class name... target.classList.remove("love_list_dragover"); /*var dz=document.getElementById("love_drop_zone_"+target.id); if(dz)dz.parentNode.remove(dz);*/ return false; } // i came up with this to help fix failed drags and it doesn't work. function love_list_drag_end(ev) { ev.stopPropagation(); ev.preventDefault(); var data=ev.dataTransfer.getData("text"); var dragged=document.getElementById(data); if(dragged&&dragged.style)dragged.style.opacity="1"; return false; } function love_list_drag_drop(ev) { ev.stopPropagation(); ev.preventDefault(); ev.dataTransfer.dropEffect="move"; var data=ev.dataTransfer.getData("text"); love_drag_id=false; var dragged=document.getElementById(data); dragged.style.opacity="1"; var target=ev.target; while(!target.id){ target=target.parentNode; } target.parentNode.insertBefore(dragged,target); target.classList.remove("love_list_dragover"); var items=target.parentNode.getElementsByClassName("love_drag_item"); for(i=0;i-1) items[i].classList.remove("love_alt"); }else{ items[i].classList.add("love_alt"); console.log("adding class to: "+i);} document.getElementById(items[i].id+"_sort").value=i+1; } if(dragHide=document.getElementById("love_list_draghide")) dragHide.parentNode.removeChild(dragHide); return false; } function love_file_selected(input) { if(input.value>""){ var node=document.getElementById("love_upload_template"); node.parentNode.insertBefore(node.cloneNode(true),document.getElementById("love_upload_button")); } } function love_file_selected(input) { if(input.value>""){ var node=document.getElementById("love_upload_template"); node.parentNode.insertBefore(node.cloneNode(true),document.getElementById("love_upload_button")); } }