/************************************************** * dom-drag.js * 09.25.2001 * www.youngpup.net ************************************************** * adapted for blummy.com by alexander kirk **************************************************/ var minX = null, maxX = null, minY = null, maxY = null; var Drag = { obj : null, init : function(name) { if (document.getElementById(name + "_handler")) { o = document.getElementById(name + "_handler"); oRoot = document.getElementById(name); this.init_helper(o, oRoot); } o = document.getElementById(name); oRoot = o; this.init_helper(o, oRoot); }, init_helper : function (o, oRoot) { o.onmousedown = Drag.start; o.root = oRoot; if (isNaN(parseInt(o.root.style.left))) o.root.style.left = "0px"; if (isNaN(parseInt(o.root.style.top))) o.root.style.top = "0px"; o.root.onDragStart = new Function(); o.root.onDragEnd = new Function(); o.root.onDrag = new Function(); }, start : function(e) { var o = Drag.obj = this; e = Drag.fixE(e); o.modifKey = e.modifiers? e.modifiers & Event.SHIFT_MASK : (e.shiftKey || false); var y = parseInt(o.root.style.top); var x = parseInt(o.root.style.left); var w = parseInt(o.root.style.width); var h = parseInt(o.root.style.height); o.root.onDragStart(x, y); o.lastMouseX = e.clientX; o.lastMouseY = e.clientY; if (o.root.id == o.id && Drag.obj.root.id.substr(0,6) == "config" && !o.modifKey) { return true; } if (Drag.obj.root.id == "blummlet_resize" || (Drag.obj.root.id.substr(0,6) == "config" && o.modifKey) ) { o.minMouseX = 10; o.maxMouseX = o.minMouseX + 300; o.minMouseY = 10; o.maxMouseY = o.minMouseY + 300; } else if (Drag.obj.root.id.substr(0,6) == "config") { myId = Drag.obj.root.id.substr(7); document.getElementById("desc_" + myId).style.display = "none"; raise_zIndex(myId); } else if (Drag.obj.root.id == "resize") { o.minMouseX = e.clientX - x + 200; o.maxMouseX = o.minMouseX + 280; o.minMouseY = e.clientY - y + 40; o.maxMouseY = o.minMouseY + 400; } else if (Drag.obj.root.id == "position") { o.minMouseX = e.clientX - x; o.maxMouseX = o.minMouseX + 416; o.minMouseY = e.clientY - y; o.maxMouseY = o.minMouseY; } document.onmousemove = Drag.drag; document.onmouseup = Drag.end; return false; }, drag : function(e) { e = Drag.fixE(e); var o = Drag.obj; var ey = e.clientY; var ex = e.clientX; if (Drag.obj.root.id == "blummlet_resize" || (Drag.obj.root.id.substr(0,6) == "config" && o.modifKey) ) { var x = parseInt(o.root.style.width); var y = parseInt(o.root.style.height); } else { var x = parseInt(o.root.style.left); var y = parseInt(o.root.style.top); } var nx, ny; if (Drag.obj.root.id == "resize" || Drag.obj.root.id == "position" ) { ex = Math.max(ex, o.minMouseX); ex = Math.min(ex, o.maxMouseX); ey = Math.max(ey, o.minMouseY); ey = Math.min(ey, o.maxMouseY); } // alert(x + "+(" + ex + "-" + o.lastMouseX + ")"); nx = x + (ex - o.lastMouseX); ny = y + (ey - o.lastMouseY); if (Drag.obj.root.id == "blummlet_resize" || (Drag.obj.root.id.substr(0,6) == "config" && o.modifKey) ) { nx = Math.max(nx, o.minMouseX); nx = Math.min(nx, o.maxMouseX); ny = Math.max(ny, o.minMouseY); ny = Math.min(ny, o.maxMouseY); Drag.obj.root.style["width"] = nx + "px"; Drag.obj.root.style["height"] = ny + "px"; } else { Drag.obj.root.style["left"] = nx + "px"; Drag.obj.root.style["top"] = ny + "px"; } if (Drag.obj.root.id == "resize") { l = document.getElementById("layer"); l.style["width"] = (nx + 16) + "px"; l.style["height"] = (ny + 16) + "px"; maxX = parseInt(l.style["left"]) + parseInt(l.style["width"]); maxY = parseInt(l.style["top"]) + parseInt(l.style["height"]); } else if (Drag.obj.root.id == "position") { if (document.getElementById("blummy")) { l = parseInt(document.getElementById("position").style.left) / 418 * 100; // to percent w = (document.all) ? document.body.offsetWidth : window.innerWidth; l = (w - parseInt(document.getElementById("layer").style.width)) * l / 100; document.getElementById("blummy").style.left = l + "px"; } } Drag.obj.lastMouseX = ex; Drag.obj.lastMouseY = ey; Drag.obj.root.onDrag(nx, ny); return false; }, end : function() { document.onmousemove = null; document.onmouseup = null; x = parseInt(Drag.obj.root.style["left"]); y = parseInt(Drag.obj.root.style["top"]); w = parseInt(Drag.obj.root.style["width"]); h = parseInt(Drag.obj.root.style["height"]); dont_refresh = false; if (Drag.obj.root.id == "resize") { l = document.getElementById("layer"); l.style.width = (x + 16) + "px"; l.style.height = (y + 16) + "px"; new Ajax.Request('/store.php', { parameters: 'width=' + (x+16) + '&height=' + (y+16) }); update_blummy_code(); } else if (Drag.obj.root.id == "blummlet_resize") { document.getElementById("width").value = Drag.obj.root.style.width; document.getElementById("height").value = Drag.obj.root.style.height; } else if (Drag.obj.root.id == "position") { l = parseInt(document.getElementById("position").style.left) / 418 * 100; // to percent new Ajax.Request('/store.php', { parameters: 'browserleft=' + l }); update_blummy_code(); dont_refresh = true; } else { x = Math.floor((x) / 10) * 10 + 5; y = Math.floor((y + 5) / 10) * 10; if (!(x >= minX && x <= maxX && y >= minY && y <= maxY-25)) { // -20 .. copyright x = 560; if (Drag.obj.root.id.substr(0,6) == "config") { myId = Drag.obj.root.id.substr(7); document.getElementById("desc_" + myId).style.display = "block"; } new Ajax.Request('/store.php', { parameters: 'delete=' + Drag.obj.root.id }); update_blummy_code(); for (i = 0; i < data_needed[Drag.obj.root.id].length; i++) { n = data_needed[Drag.obj.root.id][i]; if (n.substr(0, 1) == "!") { data_needed[Drag.obj.root.id][i] = n.substr(1); } } data_field = document.getElementById("data_" + Drag.obj.root.id); data_field.style.display = "none"; data_field.innerHTML = ""; } else { new Ajax.Request('/store.php', { parameters: 'id=' + Drag.obj.root.id + '&top=' + (y-minY) + '&left=' + (x-minX) + '&bwidth=' + w + '&bheight=' + h }); update_blummy_code(); if (data_needed[Drag.obj.root.id]) { data = ""; old_data = ""; data_field = document.getElementById("data_" + Drag.obj.root.id); trenn = (data_field.innerHTML == "") ? "" : ", "; new_data_needed = new Array(); for (iX = 0; iX < data_needed[Drag.obj.root.id].length; iX++) { n = data_needed[Drag.obj.root.id][iX]; if (n.substr(0, 1) == "!") { n2 = n.substr(1); n2 = n.replace(/ /g, "_").toLowerCase(); old_data += "&" + n2 + "=" + data_field.getAttribute(n2); new_data_needed.push(n); continue; } entry = prompt("Additional data needed: " + n, ''); if (!entry || entry == '') { new_data_needed.push(n); continue; } n2 = n.replace(/ /g, "_").toLowerCase(); data += "&" + n2 + "=" + entry; data_field.innerHTML += trenn + n + ": " + entry; data_field.setAttribute(n2, entry); trenn = ", "; new_data_needed.push("!" + n); } data_field.style.display = (data_field.innerHTML == "") ? 'none' : 'block'; data_needed[Drag.obj.root.id] = new_data_needed; if (data != "") { new Ajax.Request('/store.php', { parameters: 'data=1&id=' + Drag.obj.root.id + old_data + data }); } } } } if (document.getElementById("blummy") && !dont_refresh) { d = document.getElementById("blummy"); show_again = (d.style.display == "block"); d.style.display = "none"; d.parentNode.removeChild(d); d = document.getElementById("blummy_wiki"); d.parentNode.removeChild(d); window.clearInterval(Blummy.scrollInterval); if (show_again) { setTimeout("eval('update_blummy_code()');", 1000); } } Drag.obj.root.style["left"] = x + "px"; Drag.obj.root.style["top"] = y + "px"; resort(); Drag.obj.root.onDragEnd(x, y); Drag.obj = null; }, fixE : function(e) { if (typeof e == 'undefined') e = window.event; if (typeof e.layerX == 'undefined') e.layerX = e.offsetX; if (typeof e.layerY == 'undefined') e.layerY = e.offsetY; return e; } };