forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
9.0 KiB
265 lines
9.0 KiB
2 years ago
|
/************************************************************************************************************
|
||
|
(C) www.dhtmlgoodies.com, January 2006
|
||
|
|
||
|
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
|
||
|
|
||
|
************************************************************************************************************/
|
||
|
|
||
|
|
||
|
if (!window.rememberPositionedInCookie)
|
||
|
var rememberPositionedInCookie = false;
|
||
|
if (!window.rememberPosition_cookieName)
|
||
|
var rememberPosition_cookieName = 'demo';
|
||
|
|
||
|
|
||
|
var dragObjArray = new Array();
|
||
|
var dragObjCloneArray = new Array();
|
||
|
var numericIdToBeDragged = false;
|
||
|
var dragDropTimer = -1;
|
||
|
|
||
|
var mouse_x;
|
||
|
var mouse_y;
|
||
|
|
||
|
var el_x;
|
||
|
var el_y;
|
||
|
|
||
|
var currentZIndex = 10000;
|
||
|
var dragableElementMoved = new Array();
|
||
|
|
||
|
var dragableContent_cookieString;
|
||
|
var dragableContent_cookieItems = new Array();
|
||
|
|
||
|
|
||
|
/*
|
||
|
These cookie functions are downloaded from
|
||
|
http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
|
||
|
*/
|
||
|
function Get_Cookie(name) {
|
||
|
var start = document.cookie.indexOf(name + "=");
|
||
|
var len = start + name.length + 1;
|
||
|
if ((!start) && (name != document.cookie.substring(0, name.length)))
|
||
|
return null;
|
||
|
if (start == -1)
|
||
|
return null;
|
||
|
var end = document.cookie.indexOf(";", len);
|
||
|
if (end == -1)
|
||
|
end = document.cookie.length;
|
||
|
return unescape(document.cookie.substring(len, end));
|
||
|
}
|
||
|
// This function has been slightly modified
|
||
|
function Set_Cookie(name, value, expires, path, domain, secure) {
|
||
|
expires = expires * 60 * 60 * 24 * 1000;
|
||
|
var today = new Date();
|
||
|
var expires_date = new Date(today.getTime() + (expires));
|
||
|
var cookieString = name + "=" + escape(value) +
|
||
|
((expires) ? ";expires=" + expires_date.toGMTString() : "") +
|
||
|
((path) ? ";path=" + path : "") +
|
||
|
((domain) ? ";domain=" + domain : "") +
|
||
|
((secure) ? ";secure" : "");
|
||
|
document.cookie = cookieString;
|
||
|
}
|
||
|
|
||
|
|
||
|
function getTopPos(inputObj)
|
||
|
{
|
||
|
var returnValue = inputObj.offsetTop;
|
||
|
while ((inputObj = inputObj.offsetParent) != null) {
|
||
|
if (inputObj.tagName != 'HTML')
|
||
|
returnValue += inputObj.offsetTop;
|
||
|
}
|
||
|
return returnValue;
|
||
|
}
|
||
|
|
||
|
function getLeftPos(inputObj)
|
||
|
{
|
||
|
var returnValue = inputObj.offsetLeft;
|
||
|
while ((inputObj = inputObj.offsetParent) != null) {
|
||
|
if (inputObj.tagName != 'HTML')
|
||
|
returnValue += inputObj.offsetLeft;
|
||
|
}
|
||
|
return returnValue;
|
||
|
}
|
||
|
|
||
|
function initDragDropElement(e)
|
||
|
{
|
||
|
if (document.all)
|
||
|
e = event;
|
||
|
|
||
|
if (document.all)
|
||
|
e = event;
|
||
|
if (e.target)
|
||
|
source = e.target;
|
||
|
else if (e.srcElement)
|
||
|
source = e.srcElement;
|
||
|
if (source.nodeType == 3) // defeat Safari bug
|
||
|
source = source.parentNode;
|
||
|
if (source.tagName.toLowerCase() == 'input' || source.tagName.toLowerCase() == 'textarea')
|
||
|
return false;
|
||
|
|
||
|
|
||
|
numericIdToBeDragged = this.className.replace(/[^0-9]/g, '');
|
||
|
dragDropTimer = 0;
|
||
|
mouse_x = e.clientX;
|
||
|
mouse_y = e.clientY;
|
||
|
|
||
|
currentZIndex = currentZIndex + 1;
|
||
|
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.zIndex = currentZIndex;
|
||
|
|
||
|
if (!dragableElementMoved[numericIdToBeDragged]) {
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.top = getTopPos(dragObjArray[numericIdToBeDragged]) + 'px';
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.left = getLeftPos(dragObjArray[numericIdToBeDragged]) + 'px';
|
||
|
}
|
||
|
el_x = dragObjCloneArray[numericIdToBeDragged].style.left.replace('px', '') / 1;
|
||
|
el_y = dragObjCloneArray[numericIdToBeDragged].style.top.replace('px', '') / 1;
|
||
|
|
||
|
|
||
|
timerDragDropElement();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function timerDragDropElement()
|
||
|
{
|
||
|
if (dragDropTimer >= 0 && dragDropTimer < 10) {
|
||
|
dragDropTimer = dragDropTimer + 1;
|
||
|
setTimeout('timerDragDropElement()', 5);
|
||
|
return;
|
||
|
}
|
||
|
if (dragDropTimer >= 10) {
|
||
|
if (dragObjCloneArray[numericIdToBeDragged].style.display == 'none') {
|
||
|
dragObjArray[numericIdToBeDragged].style.visibility = 'hidden';
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.display = 'block';
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.visibility = 'visible';
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.top = getTopPos(dragObjArray[numericIdToBeDragged]) + 'px';
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.left = getLeftPos(dragObjArray[numericIdToBeDragged]) + 'px';
|
||
|
dragableElementMoved[numericIdToBeDragged] = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function cancelEvent()
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function cancelSelectionEvent()
|
||
|
{
|
||
|
if (dragDropTimer >= 0)
|
||
|
return false;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function moveDragableElement(e)
|
||
|
{
|
||
|
if (document.all)
|
||
|
e = event;
|
||
|
if (dragDropTimer < 10)
|
||
|
return;
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.left = (e.clientX - mouse_x + el_x) + 'px';
|
||
|
dragObjCloneArray[numericIdToBeDragged].style.top = (e.clientY - mouse_y + el_y) + 'px';
|
||
|
}
|
||
|
|
||
|
function stop_dragDropElement()
|
||
|
{
|
||
|
dragDropTimer = -1;
|
||
|
|
||
|
if (rememberPositionedInCookie && dragObjCloneArray[numericIdToBeDragged]) {
|
||
|
dragableContent_cookieItems['dragableElementClone' + numericIdToBeDragged] = [dragObjCloneArray[numericIdToBeDragged].style.left, dragObjCloneArray[numericIdToBeDragged].style.top, dragObjCloneArray[numericIdToBeDragged].style.zIndex];
|
||
|
}
|
||
|
if (rememberPositionedInCookie)
|
||
|
createCookieString();
|
||
|
numericIdToBeDragged = false;
|
||
|
}
|
||
|
|
||
|
function createCookieString()
|
||
|
{
|
||
|
var stringToSave = '';
|
||
|
for (var prop in dragableContent_cookieItems) {
|
||
|
if (stringToSave)
|
||
|
stringToSave = stringToSave + '###';
|
||
|
stringToSave = stringToSave + prop + ',' + dragableContent_cookieItems[prop][0] + ',' + dragableContent_cookieItems[prop][1] + ',' + dragableContent_cookieItems[prop][2];
|
||
|
}
|
||
|
Set_Cookie(rememberPosition_cookieName, stringToSave, 60000000);
|
||
|
}
|
||
|
|
||
|
|
||
|
function initdragableElements()
|
||
|
{
|
||
|
var dragableContent_cookieString = false;
|
||
|
if (rememberPositionedInCookie) {
|
||
|
dragableContent_cookieString = Get_Cookie(rememberPosition_cookieName);
|
||
|
}
|
||
|
var tmpElements = new Array();
|
||
|
var allObjects = document.getElementsByTagName('*');
|
||
|
for (var no = 0; no < allObjects.length; no++) {
|
||
|
if (allObjects[no].className == 'dragableElement') {
|
||
|
allObjects[no].style.cursor = 'move';
|
||
|
tmpElements[tmpElements.length] = allObjects[no];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (var no = 0; no < tmpElements.length; no++) {
|
||
|
var el = tmpElements[no].cloneNode(true);
|
||
|
tmpElements[no].className = 'dragableElement' + no;
|
||
|
el.onmousedown = initDragDropElement;
|
||
|
el.className = 'dragableElementClone' + no;
|
||
|
|
||
|
el.style.position = 'absolute';
|
||
|
el.style.display = 'none';
|
||
|
el.style.visibility = 'hidden';
|
||
|
|
||
|
el.style.top = getTopPos(tmpElements[no]) + 'px';
|
||
|
el.style.left = getLeftPos(tmpElements[no]) + 'px';
|
||
|
tmpElements[no].parentNode.insertBefore(el, tmpElements[no]);
|
||
|
tmpElements[no].onmousedown = initDragDropElement;
|
||
|
|
||
|
dragObjArray[no] = tmpElements[no];
|
||
|
dragObjCloneArray[no] = el;
|
||
|
}
|
||
|
|
||
|
document.body.onmousemove = moveDragableElement;
|
||
|
document.body.onmouseup = stop_dragDropElement;
|
||
|
document.body.onselectstart = cancelSelectionEvent;
|
||
|
document.body.ondragstart = cancelEvent;
|
||
|
|
||
|
// Position cookie elements
|
||
|
if (dragableContent_cookieString) {
|
||
|
|
||
|
var items = dragableContent_cookieString.split('###');
|
||
|
for (var no = 0; no < items.length; no++) {
|
||
|
var tokens = items[no].split(',');
|
||
|
dragableContent_cookieItems[tokens[0]] = [tokens[1], tokens[2], tokens[3]];
|
||
|
}
|
||
|
positionItemsFromCookie();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function positionItemsFromCookie()
|
||
|
{
|
||
|
for (var prop in dragableContent_cookieItems) {
|
||
|
for (var no = 0; no < dragObjCloneArray.length; no++) {
|
||
|
if (dragObjCloneArray[no].className == prop) {
|
||
|
dragableElementMoved[no] = true;
|
||
|
dragObjCloneArray[no].style.display = 'block';
|
||
|
dragObjArray[no].style.visibility = 'hidden';
|
||
|
dragObjCloneArray[no].style.visibility = 'visible';
|
||
|
dragObjCloneArray[no].style.left = dragableContent_cookieItems[prop][0];
|
||
|
dragObjCloneArray[no].style.top = dragableContent_cookieItems[prop][1];
|
||
|
dragObjCloneArray[no].style.zIndex = dragableContent_cookieItems[prop][2];
|
||
|
currentZIndex = Math.max(currentZIndex, dragableContent_cookieItems[prop][2] / 1 + 1);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
window.onload = initdragableElements;
|