git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@38 05c56307-c608-d34a-929d-697000501d7a
408 lines
13 KiB
JavaScript
408 lines
13 KiB
JavaScript
/*
|
|
ExpressWeb Framework by Developer Express
|
|
ExpressWebNavBar
|
|
|
|
Copyright (c) 2000-2004 Developer Express Inc.
|
|
ALL RIGHTS RESERVED
|
|
|
|
The entire contents of this file is protected by U.S. and
|
|
International Copyright Laws. Unauthorized reproduction,
|
|
reverse-engineering, and distribution of all or any portion of
|
|
the code contained in this file is strictly prohibited and may
|
|
result in severe civil and criminal penalties and will be
|
|
prosecuted to the maximum extent possible under the law.
|
|
*/
|
|
|
|
/* class BarManager */
|
|
function dx_BarManager()
|
|
{
|
|
this.inf = new dx_Info();
|
|
this.utl = new dx_Utils();
|
|
this.obj = this.utl.CreateObjHelper();
|
|
this.pos = this.utl.CreatePosHelper();
|
|
this.bar = null;
|
|
|
|
this.Initialize = function() {
|
|
var nodes = this.obj.GetTags(document, "table");
|
|
nodes = this.obj.GetNodes(nodes, "className", "clsPartContainer");
|
|
for(var i = 0; i < nodes.length; i++) {
|
|
this.InitBar( nodes[i] );
|
|
}
|
|
}
|
|
this.InitBar = function( table ) {
|
|
if( Exists(table.barElement) ) {
|
|
return;
|
|
}
|
|
var bar = new dx_BarElement(table);
|
|
table.barElement = bar;
|
|
|
|
SetProperties(bar, eval(table.id));
|
|
bar.setPartArray();
|
|
|
|
var value = bar.loadState();
|
|
if(value == null) value = bar.stateElem.value;
|
|
var state = this.ParseUserData(value);
|
|
bar.reorder(state);
|
|
}
|
|
this.ParseUserData = function( s ) {
|
|
try {
|
|
var tmpArray = s.split( ";" );
|
|
var array = new Array(tmpArray.length - 1);
|
|
for(var i = 0; i < array.length; i++) {
|
|
array[i] = tmpArray[i].split( ":" );
|
|
}
|
|
return array;
|
|
} catch(e) { return null; }
|
|
}
|
|
this.OnPartClick = function(e) {
|
|
var el = this.inf.GetSrcElement(e);
|
|
el = this.obj.GetParentById(el, "GroupItem");
|
|
var bar = this.GetBar(el);
|
|
var part = this.obj.GetParentByClass(el, "clsPart");
|
|
|
|
if(Exists(bar) && part != null && el != null) {
|
|
var action = "ItemClick";
|
|
if( bar.containsAction(action) ) {
|
|
var args = [["group", part.id], ["action", action], ["item", el.id]];
|
|
__doPostBack(bar.table.id, DoEventArgs(args) );
|
|
}
|
|
}
|
|
}
|
|
this.OnMouseDown = function(e) {
|
|
var evt = this.inf.GetEvent(e);
|
|
if(evt.button != mbtn_left) return;
|
|
|
|
var el = this.inf.GetSrcElement(evt);
|
|
if( Exists(el.className) == false ) {
|
|
el = this.obj.ParentOf(el);
|
|
}
|
|
this.bar = this.GetBar(el);
|
|
var part = this.obj.GetParentByClass(el, "clsPart");
|
|
var sc = new dx_StringComparer();
|
|
|
|
if( sc.Equals(el.className,"clsHeadRight") ) {
|
|
|
|
var collapsed = ( this.bar.isContentVisible(part) ? false : true );
|
|
this.bar.showHidePart(part, collapsed);
|
|
} else if( sc.Equals(el.className,"clsHead") ) {
|
|
if( "img" == el.tagName.toLowerCase() ) {
|
|
el.onDragStart = function() { OnDragStart(); }
|
|
}
|
|
this.bar.currentX = this.pos.GetEventX(evt, window);
|
|
this.bar.currentY = this.pos.GetEventY(evt, window);
|
|
this.bar.current = part;
|
|
this.bar.showDragWindow();
|
|
|
|
dxBar.Evt.Capture("window.document.onmousemove", function(e) { dxBar.Mng.OnMouseMove(e); } );
|
|
window.document.onmousemove = function(e) { dxBar.Evt.Exec("window.document.onmousemove", e); return false;}
|
|
|
|
dxBar.Evt.Capture("window.document.onscroll", function(e) { dxBar.Mng.OnMouseMove(e); } );
|
|
window.document.onscroll = function(e) { dxBar.Evt.Exec("window.document.onscroll", e); return false;}
|
|
|
|
dxBar.Evt.Capture("window.document.onmouseup", function() { dxBar.Mng.OnMouseUp(); } );
|
|
window.document.onmouseup = function() { dxBar.Evt.Exec("window.document.onmouseup"); }
|
|
|
|
dxBar.Evt.Capture("window.document.onselectstart", function() { } );
|
|
window.document.onselectstart = function() { dxBar.Evt.Exec("window.document.onselectstart"); return false;}
|
|
|
|
if (this.inf.ns6) { evt.preventDefault(); }
|
|
}
|
|
}
|
|
this.GetBar = function(el) {
|
|
var par = this.obj.GetParentByClass(el, "clsPartContainer");
|
|
if(null != par) return par.barElement;
|
|
}
|
|
this.OnMouseMove = function(e) {
|
|
var evt = this.inf.GetEvent(e);
|
|
if(evt.button != mbtn_left) {
|
|
this.OnMouseUp(e);
|
|
return;
|
|
}
|
|
|
|
var x = this.pos.GetEventX(evt, window);
|
|
var y = this.pos.GetEventY(evt, window);
|
|
var drag = this.bar.dragWindow.style;
|
|
drag.left = parseInt(drag.left) + x - this.bar.currentX;
|
|
drag.top = parseInt(drag.top) + y - this.bar.currentY;
|
|
this.bar.currentX = x;
|
|
this.bar.currentY = y;
|
|
|
|
if(evt.clientY > window.document.body.clientHeight - 10) {
|
|
window.scrollBy(0, 10);
|
|
} else if(evt.clientY < 10) {
|
|
window.scrollBy(evt.clientX, -10);
|
|
}
|
|
}
|
|
this.OnMouseUp = function(e) {
|
|
dxBar.Evt.Detach("window.document.onmousemove");
|
|
dxBar.Evt.Detach("window.document.onscroll");
|
|
dxBar.Evt.Detach("window.document.onmouseup");
|
|
dxBar.Evt.Detach("window.document.onselectstart");
|
|
if( Exists(this.bar.current) ) {
|
|
this.bar.setDragPosition();
|
|
this.bar.current = null;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* class BarElement */
|
|
function dx_BarElement(table)
|
|
{
|
|
this.inf = new dx_Info();
|
|
this.utl = new dx_Utils();
|
|
this.obj = this.utl.CreateObjHelper();
|
|
this.pos = this.utl.CreatePosHelper();
|
|
|
|
this.table = table;
|
|
this.dragWindow = this.obj.GetElementById("DragWindow");
|
|
this.createUniqueID = function(s) { return this.table.id + s; }
|
|
this.getPartParent = function() { return this.table.rows[0].cells[0]; }
|
|
this.getBorderColor = function(part) { return ("open" == part.state) ? this.backColor : this.collapsedBorderColor; }
|
|
this.getBackColor = function(part) { return ("open" == part.state) ? this.backColor : this.collapsedBackColor; }
|
|
this.getForeColor = function(part) { return ("open" == part.state) ? this.foreColor : this.collapsedForeColor; }
|
|
this.getLeftImage = function(part) { return ("open" == part.state) ? this.leftExpandedImage : this.leftCollapsedImage; }
|
|
this.getRightImage = function(part) { return ("open" == part.state) ? this.rightExpandedImage : this.rightCollapsedImage; }
|
|
this.formatFileName = function(name) { if("string" == typeof(name)) { name = name.replace( /[\W]/gi, "" ); return name; } }
|
|
|
|
this.stateElem = this.obj.GetElementById( this.createUniqueID("State") );
|
|
this.sContentID = this.formatFileName(window.location.href);
|
|
|
|
this.getLayout = function() {
|
|
if(Exists(this.layout) == false)
|
|
this.layout = this.getChildById(this.table, "Layout");
|
|
return this.layout;
|
|
}
|
|
this.getChildById = function(el, id) {
|
|
return this.obj.GetChildById(el, id);
|
|
}
|
|
this.setPartArray = function() {
|
|
var nodes = this.obj.GetTags(this.table, "table");
|
|
this.parts = this.obj.GetNodes(nodes, "className", "clsPart");
|
|
}
|
|
this.hideDragWindow = function() {
|
|
this.dragWindow.style.display = "none";
|
|
this.dragWindow.style.height = "";
|
|
this.dragWindow.style.top = "";
|
|
this.dragWindow.style.left = "";
|
|
this.dragWindow.style.width = "";
|
|
this.dragWindow.zIndex = "";
|
|
}
|
|
this.showDragWindow = function() {
|
|
var part = this.current;
|
|
var drag = this.dragWindow;
|
|
|
|
var height = part.offsetHeight;
|
|
drag.style.height = height;
|
|
var pt = this.pos.GetAbsolutePos(part);
|
|
drag.style.top = pt.y + 3;
|
|
drag.style.left = pt.x + 3;
|
|
drag.style.width = part.offsetWidth;
|
|
drag.style.zIndex = 1000;
|
|
drag.style.display = "block";
|
|
}
|
|
this.containsAction = function(action) {
|
|
return (this.action.indexOf(action) != -1) ? true : false;
|
|
}
|
|
this.getState = function() {
|
|
var state = "";
|
|
try {
|
|
for(var i = 0; i < this.parts.length; i++) {
|
|
var part = this.parts[i];
|
|
var s = Exists( part.state ) ? part.state : "open";
|
|
state += ( part.id + ":" + s + ";" );
|
|
}
|
|
} catch(e) {}
|
|
return state;
|
|
}
|
|
this.loadState = function() {
|
|
if(this.enableReadState) {
|
|
var data = this.getLayout();
|
|
try { data.load(this.sContentID + this.table.id); }
|
|
catch(e) { data = null; }
|
|
if( Exists(data) ) return data.getAttribute("userdata");
|
|
}
|
|
return null;
|
|
}
|
|
this.saveState = function() {
|
|
var value = this.getState();
|
|
this.stateElem.value = value;
|
|
if(this.enableWriteState) {
|
|
try {
|
|
var data = this.getLayout();
|
|
data.setAttribute("userdata", value);
|
|
data.save(this.sContentID + this.table.id);
|
|
} catch(e) {}
|
|
}
|
|
}
|
|
this.setPartPosition = function(part, nextPart) {
|
|
var parent = this.obj.ParentOf(part);
|
|
var lastPart = this.parts.Last();
|
|
if(this.inf.ie4) {
|
|
var index = (nextPart != null) ? GetItemIndex(parent.children, nextPart) :
|
|
GetItemIndex(parent.children, lastPart) + 1;
|
|
parent.innerHTML = this.getPartHTML(parent.children, index);
|
|
// InitElement( this );
|
|
} else if(this.inf.dom) {
|
|
var nextElem = (nextPart != null) ? nextPart : lastPart.nextSibling;
|
|
parent.insertBefore(part, nextElem);
|
|
}
|
|
}
|
|
this.getPartHTML = function(partSiblings, nextIndex) {
|
|
var s = "";
|
|
for(var i = 0; i <= partSiblings.length; i++) {
|
|
if(i == nextIndex) s += this.current.outerHTML;
|
|
try {
|
|
var part = partSiblings[i];
|
|
if(part == this.current) continue;
|
|
s += part.outerHTML;
|
|
} catch(e) {}
|
|
}
|
|
return s;
|
|
}
|
|
this.getNextPartIndex = function(el) {
|
|
var pte = this.pos.GetAbsolutePos(el);
|
|
for(var i = 0; i < this.parts.length; i++) {
|
|
var pt = this.pos.GetAbsolutePos(this.parts[i]);
|
|
if(pt.y > pte.y) break;
|
|
}
|
|
return i;
|
|
}
|
|
this.setDragPosition = function() {
|
|
if(null == this.current) return;
|
|
|
|
var part = this.current;
|
|
var nextIndex = this.getNextPartIndex(this.dragWindow);
|
|
this.hideDragWindow();
|
|
var action = "Order";
|
|
|
|
if( this.containsAction(action) ) {
|
|
var index = nextIndex;
|
|
if(this.parts.IndexOf(part) < index) index--;
|
|
var args = [["group", part.id], ["action", action], ["visIndex", index]];
|
|
__doPostBack(this.table.id, DoEventArgs(args) );
|
|
}
|
|
else {
|
|
if(this.parts.IndexOf(part) != nextIndex) {
|
|
var nextPart = this.parts[nextIndex];
|
|
this.setPartPosition(part, nextPart);
|
|
this.setPartArray();
|
|
this.saveState();
|
|
}
|
|
}
|
|
}
|
|
this.reorder = function(state) {
|
|
if(null == state) return;
|
|
for(var i = 0; i < state.length; i++) {
|
|
var id = state[i][0];
|
|
if( this.parts[i].id != id ) {
|
|
var nextPart = this.parts[i];
|
|
var part = this.getChildById(this.table, id);
|
|
if(part != null) {
|
|
this.setPartPosition(part, nextPart);
|
|
this.setPartArray();
|
|
}
|
|
}
|
|
}
|
|
var closed = false;
|
|
for( var i = 0; i < this.parts.length; i++ ) {
|
|
try { closed = (state[i][1] == "close"); }
|
|
catch(e) { closed = false; }
|
|
this.showHideContent(this.parts[i], !closed);
|
|
}
|
|
}
|
|
this.showHideContent = function(part, collapsed) {
|
|
this.showContent(part, collapsed);
|
|
part.state = collapsed ? "open" : "close";
|
|
|
|
var img = this.getChildById(part, "LeftImage");
|
|
if(img != null) img.src = this.getLeftImage(part);
|
|
|
|
img = this.getChildById(part, "RightImage");
|
|
if(img != null) img.src = this.getRightImage(part);
|
|
|
|
var sc = new dx_StringComparer();
|
|
var nodes = this.obj.GetChildren(part, "className", "clsBorder", sc);
|
|
for(var i = 0; i < nodes.length; i++) {
|
|
nodes[i].style.backgroundColor = this.getBorderColor(part);
|
|
}
|
|
|
|
nodes = this.obj.GetChildren(part, "className", "clsHead", sc);
|
|
for(var i = 0; i < nodes.length; i++) {
|
|
nodes[i].style.backgroundColor = this.getBackColor(part);
|
|
}
|
|
nodes = this.obj.GetChildren(part, "className", "clsHeadText", sc);
|
|
for(var i = 0; i < nodes.length; i++) {
|
|
nodes[i].style.color = this.getForeColor(part);
|
|
}
|
|
this.saveState();
|
|
}
|
|
this.showHidePart = function(part, collapsed) {
|
|
var action = collapsed ? "Expand" : "Collapse";
|
|
if(this.containsAction(action)) {
|
|
var args = [["group", part.id], ["action", action]];
|
|
__doPostBack(this.table.id, DoEventArgs(args) );
|
|
}
|
|
else this.showHideContent(part, collapsed);
|
|
}
|
|
this.isContentVisible = function(part) {
|
|
if(this.inf.ie4) {
|
|
var content = this.getPartContent(part);
|
|
return (content.style.display != "none");
|
|
} else if(this.inf.dom) {
|
|
var parent = this.getContentParent(part);
|
|
return (parent.content == null) || (parent.content == undefined);
|
|
}
|
|
return false;
|
|
}
|
|
this.showContent = function(part, visible) {
|
|
if(this.inf.ie4) {
|
|
var content = this.getPartContent(part);
|
|
content.style.display = visible ? "inline" : "none";
|
|
} else if(this.inf.dom) {
|
|
var contParent = this.getContentParent(part);
|
|
if(visible) {
|
|
if( Exists(contParent.content) ) {
|
|
contParent.appendChild(contParent.content);
|
|
contParent.content = null;
|
|
}
|
|
} else {
|
|
var content = this.getPartContent(part);
|
|
contParent.removeChild(content);
|
|
contParent.content = content;
|
|
}
|
|
}
|
|
}
|
|
this.getPartContent = function(part) {
|
|
return this.getChildById(part, "ContentTable");
|
|
}
|
|
this.getContentParent = function(part) {
|
|
return this.getChildById(part, "ContentCell");
|
|
}
|
|
}
|
|
|
|
// globals
|
|
|
|
var dxBar = [];
|
|
dxBar["Mng"] = new dx_BarManager();
|
|
dxBar["Evt"] = new dx_EventManager();
|
|
dxBar["Inf"] = new dx_Info();
|
|
mbtn_left = dxBar.Inf.ie || dxBar.Inf.op ? 1 : 0;
|
|
|
|
function OnMouseDown(e) { dxBar.Mng.OnMouseDown(e); return false; }
|
|
function OnPartClick(e) { dxBar.Mng.OnPartClick(e); }
|
|
function OnDragStart(e) {
|
|
var el = dxBar.Inf.GetSrcElement(e);
|
|
var evt = dxBar.Inf.GetEvent(e);
|
|
if(el.className.indexOf("clsHead") >= 0) evt.returnValue = false;
|
|
}
|
|
|
|
dxBar.Evt.Attach("window.onload", function() { dxBar.Mng.Initialize(); } );
|
|
window.onload = function() { dxBar.Evt.Exec("window.onload"); }
|
|
|
|
window.onerror = function() {
|
|
return true;
|
|
};
|