mirror of
https://github.com/ACSPRI/queXS
synced 2024-04-02 12:12:16 +00:00
Import from DCARF SVN
This commit is contained in:
194
include/limesurvey/admin/scripts/draganddrop.js
Normal file
194
include/limesurvey/admin/scripts/draganddrop.js
Normal file
@@ -0,0 +1,194 @@
|
||||
/************************************************************************************************************
|
||||
(C) www.dhtmlgoodies.com, October 2005
|
||||
|
||||
This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.
|
||||
|
||||
Terms of use:
|
||||
You are free to use this script as long as the copyright message is kept intact. However, you may not
|
||||
redistribute, sell or repost it without our permission.
|
||||
|
||||
Thank you!
|
||||
|
||||
www.dhtmlgoodies.com
|
||||
Alf Magne Kalleland
|
||||
|
||||
************************************************************************************************************/
|
||||
|
||||
var offsetYInsertDiv = -3; // Y offset for the little arrow indicating where the node should be inserted.
|
||||
if(!document.all)offsetYInsertDiv = offsetYInsertDiv - 7; // No IE
|
||||
|
||||
|
||||
var arrParent = false;
|
||||
var arrMoveCont = false;
|
||||
var arrMoveCounter = -1;
|
||||
var arrTarget = false;
|
||||
var arrNextSibling = false;
|
||||
var leftPosArrangableNodes = false;
|
||||
var widthArrangableNodes = false;
|
||||
var nodePositionsY = new Array();
|
||||
var nodeHeights = new Array();
|
||||
var arrInsertDiv = false;
|
||||
var insertAsFirstNode = false;
|
||||
var arrNodesDestination = false;
|
||||
function cancelEvent()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
function getTopPos(inputObj)
|
||||
{
|
||||
|
||||
var returnValue = inputObj.offsetTop;
|
||||
while((inputObj = inputObj.offsetParent) != null){
|
||||
returnValue += inputObj.offsetTop;
|
||||
}
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
function getLeftPos(inputObj)
|
||||
{
|
||||
var returnValue = inputObj.offsetLeft;
|
||||
while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
function clearMovableDiv()
|
||||
{
|
||||
if(arrMoveCont.getElementsByTagName('LI').length>0){
|
||||
if(arrNextSibling)arrParent.insertBefore(arrTarget,arrNextSibling); else arrParent.appendChild(arrTarget);
|
||||
}
|
||||
|
||||
}
|
||||
function testjs()
|
||||
{
|
||||
alert('JavaScript includes supported!');
|
||||
}
|
||||
|
||||
function initMoveNode(e)
|
||||
{
|
||||
clearMovableDiv();
|
||||
if(document.all)e = event;
|
||||
arrMoveCounter = 0;
|
||||
arrTarget = this;
|
||||
if(this.nextSibling)arrNextSibling = this.nextSibling; else arrNextSibling = false;
|
||||
timerMoveNode();
|
||||
arrMoveCont.parentNode.style.left = e.clientX + 'px';
|
||||
arrMoveCont.parentNode.style.top = e.clientY + 'px';
|
||||
return false;
|
||||
|
||||
}
|
||||
function timerMoveNode()
|
||||
{
|
||||
if(arrMoveCounter>=0 && arrMoveCounter<10){
|
||||
arrMoveCounter = arrMoveCounter +1;
|
||||
setTimeout('timerMoveNode()',20);
|
||||
}
|
||||
if(arrMoveCounter>=10){
|
||||
arrMoveCont.appendChild(arrTarget);
|
||||
}
|
||||
}
|
||||
|
||||
function arrangeNodeMove(e)
|
||||
{
|
||||
if(document.all)e = event;
|
||||
if(arrMoveCounter<10)return;
|
||||
if(document.all && arrMoveCounter>=10 && e.button!=1){
|
||||
arrangeNodeStopMove();
|
||||
}
|
||||
|
||||
arrMoveCont.parentNode.style.left = e.clientX + 'px';
|
||||
arrMoveCont.parentNode.style.top = e.clientY + 'px';
|
||||
|
||||
var tmpY = e.clientY;
|
||||
arrInsertDiv.style.display='none';
|
||||
arrNodesDestination = false;
|
||||
|
||||
|
||||
if(e.clientX<leftPosArrangableNodes || e.clientX>leftPosArrangableNodes + widthArrangableNodes)return;
|
||||
|
||||
var subs = arrParent.getElementsByTagName('LI');
|
||||
for(var no=0;no<subs.length;no++){
|
||||
var topPos =getTopPos(subs[no]);
|
||||
var tmpHeight = subs[no].offsetHeight;
|
||||
|
||||
if(no==0){
|
||||
if(tmpY<=topPos && tmpY>=topPos-5){
|
||||
arrInsertDiv.style.top = (topPos + offsetYInsertDiv) + 'px';
|
||||
arrInsertDiv.style.display = 'block';
|
||||
arrNodesDestination = subs[no];
|
||||
insertAsFirstNode = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(tmpY>=topPos && tmpY<=(topPos+tmpHeight)){
|
||||
arrInsertDiv.style.top = (topPos+tmpHeight + offsetYInsertDiv) + 'px';
|
||||
arrInsertDiv.style.display = 'block';
|
||||
arrNodesDestination = subs[no];
|
||||
insertAsFirstNode = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function arrangeNodeStopMove()
|
||||
{
|
||||
arrMoveCounter = -1;
|
||||
arrInsertDiv.style.display='none';
|
||||
|
||||
if(arrNodesDestination){
|
||||
var subs = arrParent.getElementsByTagName('LI');
|
||||
if(arrNodesDestination==subs[0] && insertAsFirstNode){
|
||||
arrParent.insertBefore(arrTarget,arrNodesDestination);
|
||||
}else{
|
||||
if(arrNodesDestination.nextSibling){
|
||||
arrParent.insertBefore(arrTarget,arrNodesDestination.nextSibling);
|
||||
}else{
|
||||
arrParent.appendChild(arrTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
arrNodesDestination = false;
|
||||
clearMovableDiv();
|
||||
}
|
||||
|
||||
function saveArrangableNodes()
|
||||
{
|
||||
var nodes = arrParent.getElementsByTagName('LI');
|
||||
var string = "";
|
||||
for(var no=0;no<nodes.length;no++){
|
||||
if(string.length>0)string = string + ',';
|
||||
string = string + nodes[no].id;
|
||||
}
|
||||
|
||||
document.forms[0].hiddenNodeIds.value = string;
|
||||
|
||||
// Just for testing
|
||||
//document.getElementById('arrDebug').innerHTML = 'Ready to save these nodes:<br>' + string.replace(/,/g,',<BR>');
|
||||
|
||||
document.forms[0].submit(); // Remove the comment in front of this line when you have set an action to the form.
|
||||
//return string ;
|
||||
}
|
||||
|
||||
function initArrangableNodes()
|
||||
{
|
||||
arrParent = document.getElementById('arrangableNodes');
|
||||
arrMoveCont = document.getElementById('movableNode').getElementsByTagName('UL')[0];
|
||||
arrInsertDiv = document.getElementById('arrDestInditcator');
|
||||
|
||||
leftPosArrangableNodes = getLeftPos(arrParent);
|
||||
arrInsertDiv.style.left = leftPosArrangableNodes - 5 + 'px';
|
||||
widthArrangableNodes = arrParent.offsetWidth;
|
||||
|
||||
var subs = arrParent.getElementsByTagName('LI');
|
||||
for(var no=0;no<subs.length;no++){
|
||||
subs[no].onmousedown = initMoveNode;
|
||||
subs[no].onselectstart = cancelEvent;
|
||||
}
|
||||
|
||||
document.documentElement.onmouseup = arrangeNodeStopMove;
|
||||
document.documentElement.onmousemove = arrangeNodeMove;
|
||||
document.documentElement.onselectstart = cancelEvent;
|
||||
|
||||
}
|
||||
window.onload = initArrangableNodes;
|
||||
|
||||
Reference in New Issue
Block a user