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.
2762 lines
68 KiB
2762 lines
68 KiB
// <script>
|
|
|
|
/*
|
|
=============================================================
|
|
WebIntelligence(r) Report Panel
|
|
Copyright(c) 2001-2003 Business Objects S.A.
|
|
All rights reserved
|
|
|
|
Use and support of this software is governed by the terms
|
|
and conditions of the software license agreement and support
|
|
policy of Business Objects S.A. and/or its subsidiaries.
|
|
The Business Objects products and technology are protected
|
|
by the US patent number 5,555,403 and 6,247,008
|
|
|
|
File: list.js
|
|
Custom BusObj List control
|
|
=============================================================
|
|
*/
|
|
|
|
_horiBOList=0
|
|
_vertBOList=1
|
|
_wrapBOList=2
|
|
_andOrBOList=3
|
|
|
|
|
|
_lstNobord="3px solid #FFFFFF"
|
|
_lstBord="3px solid #C00000"
|
|
_lstNullbord="0px solid #FFFFFF"
|
|
|
|
_dropFeebackWidget=null
|
|
_dropParentWidget=null
|
|
_dropPosition=-1
|
|
|
|
// ================================================================================
|
|
// ================================================================================
|
|
//
|
|
// OBJECT newBOListContainerWidget (Constructor)
|
|
//
|
|
// Base class for a nested filter list (with OR or AND branches)
|
|
//
|
|
// ================================================================================
|
|
// ================================================================================
|
|
|
|
function newBOListContainerWidget(id,w,h,image,layout,changeCB,dblClickCB,moveCB,deleteCB,noText,focusCB,addQuickFilterCB,help)
|
|
// CONSTRUCTOR
|
|
// id [String] the id for DHTML processing
|
|
// w [int] widget width, including borders
|
|
// h [int] widget height, including borders
|
|
// changeCB [function] callback when selecting items
|
|
// dblClickCB [function] callback when double clicking on items
|
|
// moveCB [function] callback a node is moved from the container buttons up & down
|
|
// parameters elem,node,idx. return false if all move performed by function
|
|
// noText [boolean] display buttons with no text if true
|
|
// deleteCB [function] callback when delete key pressed
|
|
// focusCB [function] callback when key pressed on the widget
|
|
// Return [AndOrBOListWidget] the instance
|
|
{
|
|
var o=newWidget(id),v=layout==_vertBOList,l=null
|
|
|
|
o.w=w
|
|
o.h=h
|
|
o.andOrList=newBOListWidget("andOrList_"+id,Math.max(0,w-18),h,image,layout,changeCB,dblClickCB,moveCB,deleteCB,focusCB,help)
|
|
|
|
o.noText=noText?noText:false
|
|
|
|
l=(v?_lstMoveUpLab:_lstMoveLeftLab)
|
|
o.up=newButtonWidget("andOrList_up_"+id,noText?null:l,AndOrContainerWidget_upDownCb,null,null,noText?l:null,null,null,_skin+'buttonIcons.gif',16,16,0,v?64:32,null,16,v?64:32)
|
|
l=(v?_lstMoveDownLab:_lstMoveRightLab)
|
|
o.down=newButtonWidget("andOrList_down_"+id,noText?null:l,AndOrContainerWidget_upDownCb,null,null,noText?l:null,null,null,_skin+'buttonIcons.gif',16,16,0,v?80:48,null,16,v?80:48)
|
|
o.up.lst=o
|
|
o.up.isUp=true
|
|
o.down.lst=o
|
|
o.down.isUp=false
|
|
o.down.extraStyle=o.up.extraStyle="margin-top:2px;"
|
|
|
|
if(addQuickFilterCB)
|
|
{
|
|
l=_lstQuickFilterLab
|
|
o.quickFilter=newButtonWidget("andOrList_quickFilter_"+id,noText?null:l,addQuickFilterCB,null,null,noText?l:null,null,null,_skin+'buttonIcons.gif',16,16,0,160,null,16,160)
|
|
o.quickFilter.lst=o
|
|
o.quickFilter.extraStyle="margin-top:2px;"
|
|
}
|
|
o.getList=AndOrContainerWidget_getList
|
|
o.getHTML=AndOrContainerWidget_getHTML
|
|
o.oldResize=o.resize
|
|
o.resize=AndOrContainerWidget_resize
|
|
o.moveElem=AndOrContainerWidget_moveElem
|
|
o.prvInit=o.init
|
|
o.init=AndOrContainerWidget_init
|
|
o.chgLayout=BOListContainerWidget_chgLayout
|
|
return o
|
|
}
|
|
|
|
//
|
|
// we can change the layout of a container even after the HTML is written
|
|
//
|
|
function BOListContainerWidget_chgLayout(layout)
|
|
{
|
|
var o=this, v=(layout==_vertBOList),noTxt=o.noText
|
|
if (o.layer==null) return
|
|
l=(v?_lstMoveUpLab:_lstMoveLeftLab)
|
|
if (!noTxt) o.up.setText(l)
|
|
o.up.changeImg(0,v?64:32,16,v?64:32,null,l)
|
|
|
|
l=(v?_lstMoveDownLab:_lstMoveRightLab)
|
|
if (!noTxt) o.down.setText(l)
|
|
o.down.changeImg(0,v?80:48,16,v?80:48,null,l)
|
|
}
|
|
|
|
// ================================================================================
|
|
// ================================================================================
|
|
//
|
|
// OBJECT newBOListWidget (Constructor)
|
|
//
|
|
// Base class for a nested filter list (with OR or AND branches)
|
|
//
|
|
// ================================================================================
|
|
// ================================================================================
|
|
|
|
function newBOListWidget(id,w,h,image,layout,changeCB,dblClickCB,moveCB,deleteCB,focusCB,help)
|
|
// CONSTRUCTOR
|
|
// id [String] the id for DHTML processing
|
|
// w [int] widget width, including borders
|
|
// h [int] widget height, including borders
|
|
// image [String] the combined image URL
|
|
// layout [_horiBOList | _vertBOList | _wrapBOList] the list layout
|
|
// changeCB [function] callback when selecting items
|
|
// dblClickCB [function] callback when double clicking on items
|
|
// moveCB [function] callback a node is moved from the container buttons up & down
|
|
// deleteCB [function] callback when delete key pressed
|
|
// focusCB [function] callback when key pressed on the widget
|
|
// Return [BOListWidget] the instance
|
|
{
|
|
var o=newScrolledZoneWidget(id,2,4,w,h)
|
|
|
|
o.image=image
|
|
o.layout=layout
|
|
o.autofit=true
|
|
o.items=new Array
|
|
o.counter=0
|
|
o.list=o
|
|
o.help=help
|
|
o.helpZone=newWidget('boListCont_help_'+o.id)
|
|
|
|
o.changeCB=changeCB
|
|
o.dblClickCB=dblClickCB
|
|
o.moveCB=moveCB
|
|
o.deleteCB=deleteCB
|
|
o.focusCB=focusCB
|
|
|
|
o.getHTML=BOListWidget_getHTML
|
|
o.add=BOListWidget_add
|
|
o.genericAdd=BOListWidget_genericAdd
|
|
|
|
o.setDragDrop=AndOrBOListWidget_setDragDrop
|
|
|
|
o.unselect=AndOrBOListWidget_unselect
|
|
o.getSelection=BOListWidget_getSelection
|
|
o.getChildIndex=AndOrNodeWidget_getChildIndex
|
|
|
|
o.select=BOListWidget_select
|
|
o.selectByVal=BOListWidget_selectByVal
|
|
o.remove=BOListWidget_remove
|
|
o.getElement=BOListWidget_getElement
|
|
o.getElementByValue=BOListWidget_getElementByValue
|
|
o.oldAONodeInit=o.init
|
|
o.init=BOListWidget_init
|
|
o.removeChild=BOListWidget_removeChild
|
|
o.getLastItem=AndOrNodeWidget_getLastItem
|
|
o.getLength=AndOrNodeWidget_getLength
|
|
o.getItem=AndOrNodeWidget_getItem
|
|
|
|
o.selection=null
|
|
o.htmlWritten=false
|
|
|
|
o.move=BOListWidget_move
|
|
o.getContentTag=BOListWidget_getContentTag
|
|
|
|
o.showOrhideHelp=BOListWidget_showOrhideHelp
|
|
o.oldresize=o.resize
|
|
o.resize=BOListWidget_resize
|
|
|
|
switch(layout)
|
|
{
|
|
case _vertBOList:
|
|
o.lBegin='<tr><td>'
|
|
o.lEnd='</td></tr>'
|
|
o.iBegin=''
|
|
o.iEnd=''
|
|
o.createCell=false
|
|
break
|
|
default:
|
|
o.lBegin='<tr>'
|
|
o.lEnd='</tr>'
|
|
o.iBegin='<td>'
|
|
o.iEnd='</td>'
|
|
o.createCell=true
|
|
break
|
|
}
|
|
|
|
return o
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_focusCB()
|
|
{
|
|
var o=getWidget(this)
|
|
if (o.focusCB)
|
|
o.focusCB()
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_getHTML(noWriteParent)
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this,items=o.items,len=items.length,a=new Array(len+3),j=0
|
|
|
|
o.htmlWritten=true
|
|
|
|
a[j++]=(noWriteParent?'':o.beginHTML())+'<table id="boListCont_'+o.id+'" cellpadding="0" cellspacing="0" border="0"><tbody>'+o.lBegin
|
|
|
|
//a[j++]=o.iBegin+'<div id="boListCont_help_'+o.id+'" class="bgzone" style="overflow:visible" ><i>'+(o.help?o.help:'')+'</i></div>'+o.iEnd
|
|
|
|
for (var i in items) a[j++]=o.iBegin+items[i].getHTML()+o.iEnd
|
|
|
|
a[j++]=o.lEnd+'</tbody></table>'//+(noWriteParent?'':o.endHTML())
|
|
//regression: do not put the help in the table because we use insertBefore(idx)
|
|
a[j++]='<div id="boListCont_help_'+o.id+'" class="bgzone" style="overflow:visible" ><i>'+(o.help?o.help:'')+'</i></div>'
|
|
a[j++]=(noWriteParent?'':o.endHTML())
|
|
return a.join("")
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_init()
|
|
// Init the widget layers
|
|
// Return [void]
|
|
{
|
|
var o=this,items=o.items
|
|
o.oldAONodeInit()
|
|
if (!o.htmlWritten)
|
|
{
|
|
o.layer.innerHTML=o.getHTML(true)
|
|
o.oldAONodeInit()
|
|
}
|
|
|
|
if (o.layer._counter !=null)
|
|
o.counter=o.layer._counter
|
|
else
|
|
o.layer._counter=o.counter
|
|
|
|
o.layer.onmousedown=BOListWidget_focusCB
|
|
|
|
for (var i in items)
|
|
items[i].init()
|
|
|
|
var dd=o.dragDrop
|
|
if (_ie&&dd)
|
|
{
|
|
dd.attachCallbacks(o.layer)
|
|
o.layer.BODDType="list"
|
|
}
|
|
|
|
o.helpZone.init();
|
|
o.showOrhideHelp();
|
|
}
|
|
|
|
function BOListWidget_showOrhideHelp()
|
|
{
|
|
var o=this
|
|
if(o.help)
|
|
{
|
|
var len = o.items.length
|
|
if(len == 0)
|
|
o.helpZone.setDisplay(true)
|
|
else
|
|
o.helpZone.setDisplay(false)
|
|
|
|
//resize if necessary
|
|
BOListWidget_resizeHelp(o,o.getWidth())
|
|
}
|
|
}
|
|
|
|
function BOListWidget_resizeHelp(list,w)
|
|
{
|
|
if(list.help && list.helpZone.isDisplayed())
|
|
{
|
|
list.helpZone.resize(Math.max(0,w-20),null)
|
|
}
|
|
|
|
}
|
|
// ================================================================================
|
|
|
|
function BOListWidget_getSelection()
|
|
// Get the current delected node or item
|
|
// Return and object with index & value, or null if no selection
|
|
{
|
|
var o=this,sel=o.selection
|
|
if (sel)
|
|
{
|
|
var id=sel.id,index=-1,items=o.items;len=items.length
|
|
for (var i=0;i<len;i++)
|
|
{
|
|
if (items[i].id==id)
|
|
{
|
|
index=i
|
|
break
|
|
}
|
|
}
|
|
|
|
ret=new Object;
|
|
ret.index=i
|
|
ret.value=sel.value
|
|
|
|
return ret
|
|
}
|
|
else
|
|
return null
|
|
}
|
|
|
|
function BOListWidget_getContentTag()
|
|
{
|
|
var o=this
|
|
var parNode=o.layer.childNodes[0].childNodes[0].childNodes[0]
|
|
if (!o.createCell)
|
|
parNode=parNode.childNodes[0]
|
|
return parNode
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_genericAdd(nodeOrItem,idx)
|
|
// PRIVATE Adds a node or an item
|
|
// nodeOrItem [AndOrNodeWidget or AndOrItemWidget]
|
|
// Return [AndOrNodeWidget or AndOrItemWidget]
|
|
{
|
|
nodeOrItem.fullW=true
|
|
|
|
var o=this, list=o.list
|
|
idx=arrayAdd(o,"items",nodeOrItem,idx)
|
|
var items=o.items
|
|
|
|
nodeOrItem.par=o
|
|
nodeOrItem.list=o.list
|
|
|
|
if (o.layer)
|
|
{
|
|
var parNode=o.getContentTag()
|
|
var s=nodeOrItem.getHTML()
|
|
|
|
if (o.createCell)
|
|
{
|
|
var theCell=_curDoc.createElement('td')
|
|
theCell.innerHTML=s
|
|
|
|
if (idx==(items.length-1))
|
|
parNode.appendChild(theCell)
|
|
else
|
|
parNode.insertBefore(theCell,parNode.childNodes[idx])
|
|
}
|
|
else
|
|
{
|
|
if ((idx==-1)||(idx==(items.length-1)))
|
|
append(parNode,s)
|
|
else
|
|
insBefore(parNode.childNodes[idx],s)
|
|
}
|
|
|
|
nodeOrItem.init()
|
|
}
|
|
o.showOrhideHelp();
|
|
|
|
return nodeOrItem
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_add(text,imgIndex,value,tooltip,idx)
|
|
// Adds an item
|
|
// text [String] item text
|
|
// imgIndex [int] image index in the combined image
|
|
// value [String] item value - must be unique in the list
|
|
// tooltip [String] tooltip
|
|
// Returns : [void]
|
|
{
|
|
var o=this,last=o.getLastItem()
|
|
var ret=o.genericAdd(newAndOrNodeItem(o.id+'_item-'+(o.counter++),text,imgIndex,value,tooltip),idx)
|
|
var last2=o.getLastItem()
|
|
|
|
if (o.layer)
|
|
{
|
|
if (last&&(last2.id!=last.id))
|
|
{
|
|
if (o.layout==_vertBOList)
|
|
last.css.borderBottom=_lstNullbord
|
|
else
|
|
last.css.borderRight=_lstNullbord
|
|
}
|
|
|
|
o.layer._counter=o.counter
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_select(index)
|
|
// Selects and item from its index
|
|
// index [int] : the index
|
|
// Returns : [void]
|
|
{
|
|
var items=this.items,len=items.length
|
|
index=index==-1?len-1:index
|
|
if ((index>=0)&&(index<len))
|
|
items[index].select(true)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_getElementByValue(value)
|
|
// Get an item from its value
|
|
// value [String] : the value
|
|
// Return [AndOrNodeItem] the item (null if not found)
|
|
{
|
|
var o=this,items=o.items,len=items.length
|
|
for (var i=0;i<len;i++)
|
|
{
|
|
if (items[i].value==value)
|
|
return items[i]
|
|
}
|
|
return null
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_getElement(idx)
|
|
// Get an item from its index
|
|
// idx [int] : the index
|
|
// Return [AndOrNodeItem] the item (null if not found)
|
|
{
|
|
var it=this.items,len=it.length
|
|
return ((idx>=0)&&(idx<len))?it[idx]:null
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_remove(idx)
|
|
// Remove an element from its index
|
|
// idx [int] element index. if null, remove ALL elements
|
|
// Returns : [void]
|
|
{
|
|
var o=this
|
|
if (idx==null)
|
|
{
|
|
while(o.items.length>0)
|
|
o.remove(0)
|
|
}
|
|
else
|
|
{
|
|
var it=o.getElement(idx)
|
|
if (it)
|
|
it.remove()
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_selectByVal(value)
|
|
// Selects an item from its value
|
|
// value [String] : the value
|
|
// Return [void]
|
|
{
|
|
var item=this.getElementByValue(value)
|
|
if (item)
|
|
item.select(true)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_removeChild(nodeOrItem)
|
|
// Removes a child
|
|
// nodeOrItem [AndOrNodeItem] : the item to remove
|
|
// Return [void]
|
|
{
|
|
var o=this,items=o.items,len=items.length,list=o.list
|
|
|
|
for (var i=0;i<len;i++)
|
|
{
|
|
var item=items[i]
|
|
if (item.id==nodeOrItem.id)
|
|
{
|
|
var l=item.layer
|
|
|
|
if (item.selected)
|
|
item.select(false)
|
|
|
|
if (l)
|
|
{
|
|
var p=l.parentNode
|
|
|
|
if (o.createCell)
|
|
{
|
|
l=p
|
|
p=p.parentNode
|
|
}
|
|
|
|
p.removeChild(l)
|
|
}
|
|
|
|
arrayRemove(o,"items",i)
|
|
items=o.items
|
|
|
|
var newSel=Math.min(i,items.length-1)
|
|
if (newSel>=0)
|
|
{
|
|
items[newSel].select(true)
|
|
var last=o.getLastItem()
|
|
if (o.layer)
|
|
{
|
|
if (last&&!last.isNode())
|
|
{
|
|
var ly=o.list.layout
|
|
if (ly==_vertBOList)
|
|
{
|
|
last.css.borderBottom=_lstNobord
|
|
}
|
|
else
|
|
last.css.borderRight=_lstNobord
|
|
}
|
|
}
|
|
}
|
|
else o.select(true)
|
|
|
|
break
|
|
}
|
|
}
|
|
o.showOrhideHelp();
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function BOListWidget_move(e,node,destIdx)
|
|
{
|
|
|
|
var o=this
|
|
e.select(false)
|
|
var n=o.add(e.text,e.imgIndex,e.value,e.tooltip,destIdx)
|
|
e.remove()
|
|
n.select(true)
|
|
}
|
|
|
|
// ================================================================================
|
|
function BOListWidget_resize(w,h)
|
|
{
|
|
var o=this
|
|
BOListWidget_resizeHelp(o,w)
|
|
o.oldresize(w,h)
|
|
}
|
|
|
|
// ================================================================================
|
|
// ================================================================================
|
|
//
|
|
// OBJECT newAndOrContainerWidget (Constructor)
|
|
//
|
|
// Base class for a nested filter list (with OR or AND branches)
|
|
//
|
|
// ================================================================================
|
|
// ================================================================================
|
|
|
|
function newAndOrContainerWidget(id,w,h,image,changeCB,dblClickCB,andOrCB,moveCB,newNodeCB,deleteCB,noText,help)
|
|
// CONSTRUCTOR
|
|
// id [String] the id for DHTML processing
|
|
// w [int] widget width, including borders
|
|
// h [int] widget height, including borders
|
|
// changeCB [function] callback when selecting items
|
|
// dblClickCB [function] callback when double clicking on items
|
|
// andOrCB [function] callback a node type is changed
|
|
// moveCB [function] callback a node is moved from the container buttons up & down
|
|
// newNodeCB [function] callback a new node is created from the container button
|
|
// deleteCB [function] callback when delete key pressed
|
|
// noText [boolean] display buttons with no text if true
|
|
// Return [AndOrBOListWidget] the instance
|
|
{
|
|
var o=newWidget(id),l
|
|
|
|
o.w=w
|
|
o.h=h
|
|
o.andOrList=newAndOrBOListWidget("andOrList_"+id,10,h,image,changeCB,dblClickCB,andOrCB,moveCB,newNodeCB,deleteCB,help)
|
|
l=_lstMoveUpLab
|
|
o.up=newButtonWidget("andOrList_up_"+id,noText?null:l,AndOrContainerWidget_upDownCb,null,null,noText?l:null,null,null,_skin+'buttonIcons.gif',16,16,0,64,null,16,64)
|
|
l=_lstMoveDownLab
|
|
o.down=newButtonWidget("andOrList_down_"+id,noText?null:l,AndOrContainerWidget_upDownCb,null,null,noText?l:null,null,null,_skin+'buttonIcons.gif',16,16,0,80,null,16,80)
|
|
l=_lstNewNodeLab
|
|
o.newNode=newButtonWidget("andOrList_newNode_"+id,noText?null:l,AndOrContainerWidget_nodeCb,null,null,noText?l:null,null,null,_skin+'buttonIcons.gif',16,16,0,96,null,16,96)
|
|
|
|
o.down.extraStyle="margin-top:2px;"
|
|
o.newNode.extraStyle="margin-top:2px;"
|
|
|
|
o.up.lst=o
|
|
o.up.isUp=true
|
|
o.down.lst=o
|
|
o.down.isUp=false
|
|
|
|
o.newNode.lst=o
|
|
|
|
o.getList=AndOrContainerWidget_getList
|
|
o.getHTML=AndOrContainerWidget_getHTML
|
|
|
|
o.oldResize=o.resize
|
|
o.resize=AndOrContainerWidget_resize
|
|
o.moveElem=AndOrContainerWidget_moveElem
|
|
o.canBeMoved=AndOrContainerWidget_canBeMoved
|
|
o.prvInit=o.init
|
|
o.init=AndOrContainerWidget_init
|
|
|
|
return o
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrContainerWidget_init()
|
|
{
|
|
var o=this
|
|
o.rightZone=getLayer('rightZone_'+o.id)
|
|
o.prvInit()
|
|
o.up.init()
|
|
o.down.init()
|
|
if(o.quickFilter)
|
|
o.quickFilter.init()
|
|
if (o.newNode)
|
|
o.newNode.init()
|
|
o.andOrList.init()
|
|
o.resize(o.w,o.h)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrContainerWidget_getHTML()
|
|
// Returns the widget HTML
|
|
{
|
|
var o=this,list=o.andOrList
|
|
|
|
return '<table id="'+o.id+'" style="overflow:hidden;width:'+o.w+'px;height='+o.h+'px" cellpadding="0" cellspacing="0" border="0"><tbody><tr>'+
|
|
'<td style="padding-right:5px" width="100%">'+list.getHTML()+'</td>'+
|
|
'<td id="rightZone_'+o.id+'" align="center" valign="top">'+o.up.getHTML()+o.down.getHTML()+(o.newNode?o.newNode.getHTML():'')+(o.quickFilter?o.quickFilter.getHTML():'')+'</td>'+
|
|
'</tr></tbody></table>'
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrContainerWidget_getList()
|
|
// get the included AndOrBOListWidget
|
|
// return [AndOrBOListWidget]
|
|
{
|
|
return this.andOrList
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrContainerWidget_resize(w,h)
|
|
// resize the container widget
|
|
// w [int] : width
|
|
// h [int] : height
|
|
// return [void]
|
|
{
|
|
var o=this
|
|
o.oldResize(w,h)
|
|
var butnW=o.rightZone.offsetWidth
|
|
o.andOrList.resize(w!=null?Math.max(0,w-butnW-5):null,h)
|
|
o.up.resize(butnW)
|
|
o.down.resize(butnW)
|
|
|
|
if(o.quickFilter)
|
|
o.quickFilter.resize(butnW)
|
|
if (o.newNode)
|
|
o.newNode.resize(butnW)
|
|
|
|
var d=o.layer.display!="none"
|
|
|
|
if (d&_moz&&!_saf)
|
|
o.setDisplay(false)
|
|
o.oldResize(w,h)
|
|
if (d&_moz&&!_saf)
|
|
o.setDisplay(true)
|
|
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrContainerWidget_upDownCb()
|
|
// DHTML Callback. Called when up or down arrow is pressed
|
|
// elem [DHTML Element] : the element
|
|
// up [boolean] : if true move up; else move down
|
|
// return [void]
|
|
{
|
|
var o=this.lst,list=o.andOrList,sel=list.selection
|
|
|
|
if (sel)
|
|
o.moveElem(sel,this.isUp)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrContainerWidget_nodeCb()
|
|
// DHTML Callback. Called when node button is pressed
|
|
// elem [DHTML Element] : the element
|
|
// return [void]
|
|
{
|
|
var o=this.lst.andOrList,sel=o.getSelection()
|
|
|
|
if (sel)
|
|
{
|
|
var n=null
|
|
if (sel.isNode())
|
|
n=sel.addNode(!sel.isAnd,"")
|
|
else
|
|
n=sel.par.addNode(!sel.par.isAnd,"",sel.getIndexInParent()+1)
|
|
|
|
n.select(true)
|
|
if (o.newNodeCB)
|
|
o.newNodeCB()
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrContainerWidget_canBeMoved(elem,up)
|
|
{
|
|
|
|
var o=this,node=elem.par
|
|
if (node)
|
|
{
|
|
var idx=node.getChildIndex(elem),itemIdx=idx
|
|
if (idx!=-1)
|
|
{
|
|
if (up&&(idx>0))
|
|
return true;
|
|
else if (!up&&(idx<(node.items.length-1)))
|
|
return true;
|
|
else
|
|
{
|
|
idx+=(up?-1:2)
|
|
if ((idx<0)||(idx>node.items.length))
|
|
{
|
|
if (node.par)
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
// ================================================================================
|
|
function AndOrContainerWidget_moveElem(elem,up)
|
|
// Move down or up an item, in depth before
|
|
// elem [AndOrNodeWidget] or [AndOrItemWidget] : the item to move
|
|
// up [boolean] : if true move up; else move down
|
|
{
|
|
var o=this,node=elem.par
|
|
if (node)
|
|
{
|
|
var idx=node.getChildIndex(elem),itemIdx=idx
|
|
if (idx!=-1)
|
|
{
|
|
if (up&&(idx>0)&&(node.items[idx-1].isNode()))
|
|
{
|
|
node=node.items[idx-1]
|
|
idx=node.items.length
|
|
}
|
|
else if (!up&&(idx<(node.items.length-1))&&(node.items[idx+1].isNode()))
|
|
{
|
|
node=node.items[idx+1]
|
|
idx=0
|
|
}
|
|
else
|
|
{
|
|
idx+=(up?-1:2)
|
|
if ((idx<0)||(idx>node.items.length))
|
|
{
|
|
var oldNode=node
|
|
node=node.par
|
|
if (node)
|
|
idx=node.getChildIndex(oldNode)+(up?0:1)
|
|
}
|
|
}
|
|
|
|
if (node)
|
|
{
|
|
var list=o.getList(),doMove=true
|
|
|
|
if (list.moveCB)
|
|
doMove=list.moveCB(elem,node,idx)
|
|
|
|
if ((doMove==null)||doMove)
|
|
list.move(elem,node,idx)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
// ================================================================================
|
|
//
|
|
// OBJECT newAndOrBOListWidget (Constructor)
|
|
//
|
|
// Base class for a nested filter list (with OR or AND branches)
|
|
//
|
|
// ================================================================================
|
|
// ================================================================================
|
|
|
|
function newAndOrBOListWidget(id,w,h,image,changeCB,dblClickCB,andOrCB,moveCB,newNodeCB,deleteCB,help)
|
|
// CONSTRUCTOR
|
|
// id [String] the id for DHTML processing
|
|
// w [int] widget width, including borders
|
|
// h [int] widget height, including borders
|
|
// changeCB [function] callback when selecting items
|
|
// dblClickCB [function] callback when double clicking on items
|
|
// andOrCB [function] callback a node type is changed
|
|
// moveCB [function] callback a node is moved from the container buttons up & down
|
|
// newNodeCB [function] callback a new node is created from the container button
|
|
// deleteCB [function] callback when delete key pressed
|
|
// Return [AndOrBOListWidget] the instance
|
|
{
|
|
var o=newScrolledZoneWidget(id,2,4,w,h)
|
|
|
|
o.image=image
|
|
o.changeCB=changeCB
|
|
o.dblClickCB=dblClickCB
|
|
o.andOrCB=andOrCB
|
|
o.moveCB=moveCB
|
|
o.newNodeCB=newNodeCB
|
|
o.deleteCB=deleteCB
|
|
o.layout=_andOrBOList
|
|
|
|
o.root=newAndOrNodeWidget(id+"_rootOperator",true,"")
|
|
//o.root.isDisplayed=true
|
|
o.root.list=o
|
|
o.selection=o.root
|
|
o.root.selected=true
|
|
o.help=help
|
|
o.helpZone=newWidget("andOrCont_help_"+id)
|
|
|
|
o.getHTML=AndOrBOListWidget_getHTML
|
|
o.getRoot=AndOrBOListWidget_getRoot
|
|
|
|
o.setDragDrop=AndOrBOListWidget_setDragDrop
|
|
o.unselect=AndOrBOListWidget_unselect
|
|
o.getSelection=AndOrBOListWidget_getSelection
|
|
o.select=AndOrBOListWidget_select
|
|
o.getElementByValue=AndOrBOListWidget_getElementByValue
|
|
o.showOrhideRoot=AndOrBOListWidget_showOrhideRoot
|
|
o.oldAOListInit=o.init
|
|
o.init=AndOrBOListWidget_init
|
|
o.move=AndOrBOListWidget_move
|
|
o.htmlWritten=false
|
|
|
|
o.oldresize=o.resize
|
|
o.resize=AndOrBOListWidget_resize
|
|
|
|
return o
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_move(e,destNode,destIdx)
|
|
// move an item
|
|
// e [AndOrNodeWidget] or [AndOrItemWidget] : the item to move
|
|
// destNode [AndOrNodeWidget] the destination node
|
|
// destIdx [int] the index into the destination node
|
|
// Return [void]
|
|
{
|
|
if (destNode)
|
|
{
|
|
var n=null
|
|
e.select(false)
|
|
if (e.isNode())
|
|
n=destNode.addCopyNode(e,destIdx)
|
|
else
|
|
{
|
|
if(e.isAdvFilter)
|
|
n=destNode.addAdvFilterItem(e.text,e.imgIndex,e.value,e.tooltip,destIdx)
|
|
else
|
|
n=destNode.addItem(e.text,e.imgIndex,e.value,e.tooltip,destIdx)
|
|
}
|
|
e.remove()
|
|
n.select(true)
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_getSelection()
|
|
// Get the current selected node or item
|
|
// Return [AndOrNodeWidget] or [AndOrItemWidget] or null if no selection
|
|
{
|
|
return this.selection
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_select(itemOrNode)
|
|
// Select an item or a node
|
|
// itemOrNode [AndOrNodeWidget] or [AndOrItemWidget]
|
|
{
|
|
itemOrNode.select(true)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_getElementByValue(value)
|
|
// Get an element from its value
|
|
// Return [AndOrNodeWidget or [AndOrItemWidget] or null if not found
|
|
{
|
|
return this.root.getElementByValue(value)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_init()
|
|
// Init the widget
|
|
{
|
|
var o=this
|
|
o.oldAOListInit()
|
|
|
|
if (!o.htmlWritten)
|
|
{
|
|
o.layer.innerHTML=o.getHTML(true)
|
|
o.oldAOListInit()
|
|
}
|
|
|
|
|
|
o.root.init()
|
|
o.helpZone.init();
|
|
o.showOrhideRoot()
|
|
|
|
var dd=o.dragDrop
|
|
if (_ie&&dd)
|
|
{
|
|
dd.attachCallbacks(o.layer)
|
|
o.layer.BODDType="andorlist"
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_unselect()
|
|
// Unselect
|
|
{
|
|
var o=this
|
|
if (o.selection)
|
|
o.selection.select(false)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_getHTML(noWriteParent)
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this
|
|
o.htmlWritten=true
|
|
|
|
var a=new Array(3), j=0, len = o.root.items.length
|
|
a[j++]=(noWriteParent?'':o.beginHTML())
|
|
a[j++]='<div id="andOrCont_'+o.id+'">'+'<div id="andOrCont_help_'+o.id+'" class="bgzone" style="overflow:visible"><i>'+(o.help?o.help:'')+'</i></div>'+o.root.getHTML()+'</div>'
|
|
a[j++]=(noWriteParent?'':o.endHTML())
|
|
|
|
return a.join("")
|
|
//return (noWriteParent?'':o.beginHTML())+'<div id="andOrCont_'+o.id+'">'+o.root.getHTML()+'</div>'+(noWriteParent?'':o.endHTML())
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_getRoot()
|
|
// Return [AndOrBOOperatorWidget] the root widget
|
|
{
|
|
return this.root
|
|
}
|
|
|
|
// ================================================================================
|
|
function AndOrBOListWidget_showOrhideHelp(list)
|
|
{
|
|
if(list.help)
|
|
{
|
|
var len = list.root.items.length
|
|
if(len == 0)
|
|
list.helpZone.setDisplay(true)
|
|
else
|
|
list.helpZone.setDisplay(false)
|
|
|
|
//resize
|
|
AndOrBOListWidget_resizeHelp(list,list.getWidth())
|
|
}
|
|
}
|
|
|
|
function AndOrBOListWidget_resizeHelp(list,w)
|
|
{
|
|
if(list.help && list.helpZone.isDisplayed())
|
|
{
|
|
list.helpZone.resize(Math.max(0,w-20),null)
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
function AndOrBOListWidget_showOrhideRoot()
|
|
// hide/show the root widget
|
|
{
|
|
var o=this, root= o.root, len = root.items.length, show = true
|
|
|
|
if (o.layer)
|
|
{
|
|
if((len == 0) || ((len==1) && (!root.items[0].isNode()) )) show=false
|
|
|
|
root.operLayer.parentNode.style.display=show?"":"none"
|
|
|
|
//show or hide the help zone
|
|
AndOrBOListWidget_showOrhideHelp(o)
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_resize(w,h)
|
|
{
|
|
var o=this
|
|
AndOrBOListWidget_resizeHelp(o,w)
|
|
o.oldresize(w,h);
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrBOListWidget_setDragDrop(dragCB,acceptDropCB,dropCB)
|
|
// Add drag & drop handlers to the widget
|
|
// dragCB (source) : triggered when beginning D&D
|
|
// acceptDropCB (source, target, ctrl, shift) : return boolean if D&D is accepted
|
|
// dropCB (source, target, ctrl, shift) : triggered when ending D&D
|
|
//
|
|
// when acceptDropCB & dropCB is called, target has some additional fields
|
|
//
|
|
// * target.dropWidget : the container (list or node) where inserting
|
|
// * target.dropIndex : the index to insert (-1 is at the end)
|
|
{
|
|
var o=this
|
|
o.dragCB=dragCB
|
|
o.acceptDropCB=acceptDropCB
|
|
o.dropCB=dropCB
|
|
|
|
o.dragDrop=newDragDropData(o,EBLWidget_dragStartCB,EBLWidget_dragCB,EBLWidget_dragEndCB,EBLWidget_acceptDropCB,EBLWidget_leaveDropCB,EBLWidget_dropCB)
|
|
}
|
|
// ================================================================================
|
|
|
|
function EBLWidget_getDropInfo(layer)
|
|
// Get the widget that must display drop feedback
|
|
// Fill the global _dropFeebackWidget
|
|
// and _dropPosition
|
|
{
|
|
var o=getWidget(layer)
|
|
switch (layer.BODDType)
|
|
{
|
|
case "root":
|
|
case "nodebg":
|
|
case "list":
|
|
case "andorlist":
|
|
_dropParentWidget=o.items?o:o.root
|
|
_dropFeebackWidget=_dropParentWidget.getLastItem()
|
|
|
|
if ((layer.BODDType=="nodebg")&&(_dropFeebackWidget==null))
|
|
_dropFeebackWidget=_dropParentWidget
|
|
|
|
_dropPosition=-1
|
|
break
|
|
|
|
case "node":
|
|
case "item":
|
|
_dropParentWidget=o.par
|
|
_dropFeebackWidget=o
|
|
_dropPosition=o.getIndexInParent()
|
|
break
|
|
}
|
|
return _dropFeebackWidget
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function EBLWidget_dragStartCB(source,layer)
|
|
// Triggered when starting drag
|
|
{
|
|
var o=getWidget(layer)
|
|
_curWin.event.cancelBubble=true
|
|
|
|
if (o)
|
|
{
|
|
var list=o.list
|
|
source.dragCB(source)
|
|
newTooltipWidget().show(true,o.text?o.text:(o.isAnd?_lstAndLabel:_lstOrLabel),o.text?list.image:null,16,16,0,o.imgIndex*16)
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function EBLWidget_dragCB(source,layer,shift)
|
|
// Triggered while dragging
|
|
{
|
|
newTooltipWidget().setPos(shift);
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function EBLWidget_dragEndCB(source)
|
|
// Triggered when ending drag & drop
|
|
{
|
|
newTooltipWidget().show(false)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function EBLWidget_acceptDropCB(source,target,ctrl,shift,layer,enter)
|
|
{
|
|
var o=EBLWidget_getDropInfo(layer)
|
|
|
|
target.dropWidget=_dropParentWidget
|
|
target.dropIndex=_dropPosition
|
|
|
|
|
|
var accepted=target.acceptDropCB(source,target,ctrl,shift)
|
|
|
|
if (accepted&&o)
|
|
{
|
|
if (source&&(source.id==target.id))
|
|
{
|
|
var s=source.selection
|
|
if ((s&&s.isNode()&&(o.isChildOf(s)))||
|
|
(shift&&s&&o.isNode()&&(s.isChildOf(o)))||
|
|
(!ctrl&&s&&(s.id==o.id)))
|
|
{
|
|
o.setInsertFeedback(false,shift)
|
|
return false
|
|
}
|
|
|
|
if (!shift&&!ctrl&&o.par&&(o.par==s.par))
|
|
{
|
|
var srcIdx=s.getIndexInParent()
|
|
if (srcIdx==(_dropPosition-1))
|
|
{
|
|
o.setInsertFeedback(false,shift)
|
|
return false
|
|
}
|
|
}
|
|
|
|
}
|
|
o.setInsertFeedback(true,shift)
|
|
}
|
|
else if(o)
|
|
o.setInsertFeedback(false,shift)
|
|
return accepted;
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function EBLWidget_leaveDropCB(source,target,ctrl,shift,layer)
|
|
{
|
|
var o=EBLWidget_getDropInfo(layer)
|
|
if (o)
|
|
o.setInsertFeedback(false)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function EBLWidget_dropCB(source,target,ctrl,shift,layer)
|
|
// Drop function
|
|
{
|
|
newTooltipWidget().show(false);
|
|
var o=EBLWidget_getDropInfo(layer)
|
|
if (o)
|
|
o.setInsertFeedback(false)
|
|
|
|
EBLWidget_leaveDropCB(source,target,ctrl,shift,layer)
|
|
|
|
target.dropWidget=_dropParentWidget
|
|
target.dropIndex=_dropPosition
|
|
target.dropCB(source,target,ctrl,shift)
|
|
}
|
|
|
|
// ================================================================================
|
|
// ================================================================================
|
|
//
|
|
// OBJECT newAndOrNodeWidget (Constructor)
|
|
//
|
|
// Base class for a filter list OR or AND node
|
|
//
|
|
// ================================================================================
|
|
// ================================================================================
|
|
|
|
function newAndOrNodeWidget(id,isAnd,value)
|
|
// CONSTRUCTOR
|
|
// id [String] the id for DHTML processing
|
|
// isAnd [boolean] if true, is a AND node; else is a OR node
|
|
// Return [AndOrNodeWidget] the instance
|
|
{
|
|
var o=newWidget(id)
|
|
o.isAnd=isAnd
|
|
o.items=new Array
|
|
o.value=value
|
|
o.par=null
|
|
o.list=null
|
|
|
|
o.counter=0
|
|
o.operLayer=null
|
|
|
|
o.getHTML=AndOrNodeWidget_getHTML
|
|
o.getInnerHTML=AndOrNodeWidget_getInnerHTML
|
|
o.getDynamicHTML=AndOrNodeWidget_getDynamicHTML
|
|
o.addNode=AndOrNodeWidget_addNode
|
|
o.addCopyNode=AndOrNodeWidget_addCopyNode
|
|
o.addItem=AndOrNodeWidget_addItem
|
|
o.addAdvFilterItem=AndOrNodeWidget_AdvFilterItem
|
|
o.select=AndOrNodeWidget_select
|
|
o.removeChild=AndOrNodeWidget_removeChild
|
|
o.remove=AndOrNodeWidget_remove
|
|
o.isNode=AndOrNodeWidget_isNode
|
|
o.getElementByValue=AndOrNodeWidget_getElementByValue
|
|
o.setIsAnd=AndOrNodeWidget_setIsAnd
|
|
o.setInsertFeedback=AndOrNodeItem_setInsertFeedback
|
|
o.getLastItem=AndOrNodeWidget_getLastItem
|
|
o.getLength=AndOrNodeWidget_getLength
|
|
|
|
o.getParentNode=AndOrNodeWidget_getParentNode
|
|
o.getChildIndex=AndOrNodeWidget_getChildIndex
|
|
o.getIndexInParent=AndOrNodeWidget_getIndexInParent
|
|
o.getItem=AndOrNodeWidget_getItem
|
|
|
|
o.genericAdd=AndOrNodeWidget_genericAdd
|
|
o.oldAONodeInit=o.init
|
|
o.init=AndOrNodeWidget_init
|
|
o.isChildOf=AndOrNodeItem_isChildOf
|
|
|
|
o.andLabel=_lstAndLabel
|
|
o.orLabel=_lstOrLabel
|
|
|
|
return o
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getParentNode()
|
|
// Return [AndOrNodeWidget] the parent node (null if root)
|
|
{
|
|
return this.par
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getLastItem()
|
|
// Return [AndOrNodeWidget] the last node (null if not)
|
|
{
|
|
var it=this.items,len=it.length
|
|
return len>0?it[len-1]:null
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getChildIndex(child)
|
|
// Return [int] the child index (position between 0 and length-1).
|
|
// if child is not in the node, return -1
|
|
{
|
|
var items=this.items,len=items.length
|
|
for (var i=0;i<len;i++)
|
|
if (items[i].id==child.id)
|
|
return i
|
|
return -1
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getIndexInParent()
|
|
// return [int] index in parent node
|
|
{
|
|
var o=this,par=o.par
|
|
return par?par.getChildIndex(o):-1
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getElementByValue(value)
|
|
{
|
|
var o=this,items=o.items
|
|
if (o.value==value)
|
|
return o
|
|
|
|
for (var i in items)
|
|
{
|
|
var item=items[i]
|
|
if (item.isNode())
|
|
{
|
|
var elem=item.getElementByValue(value)
|
|
if (elem!=null)
|
|
return elem
|
|
}
|
|
else if (item.value==value)
|
|
return item
|
|
}
|
|
return null
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_isNode()
|
|
// Test if it's a node
|
|
{
|
|
return true
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getItem(idx)
|
|
// Test if it's a node
|
|
{
|
|
var it=this.items,len=it.length
|
|
if (idx==-1) idx=len-1
|
|
return ((idx>=0)&&(idx<len))?it[idx]:null
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getLength()
|
|
{
|
|
return this.items.length
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getHTML()
|
|
// Get the widget HTML
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this
|
|
|
|
return '<table id="'+o.id+'" style="border-top:'+_lstNobord+';" cellpadding="0" cellspacing="0" border="0">' +
|
|
o.getInnerHTML() +
|
|
'</table>'
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getInnerHTML()
|
|
// Get the widget HTML
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this,items=o.items,len=items.length,a=new Array(len+2),j=0
|
|
var lab=o.isAnd?o.andLabel:o.orLabel
|
|
|
|
//lab=elasticZone(lab,_skin+'bolist.gif',3,26,o.selected?234:156,'oper_'+o.id,'treeNormal',null,0,0,'width="30" align="center"','operTxt_'+o.id)+getSpace(40,1)
|
|
lab=elasticZone(lab,_skin+'bolist.gif',3,28,o.selected?252:168,'oper_'+o.id,'treeNormal',null,0,0,'width="30" align="center"','operTxt_'+o.id)+getSpace(40,1)
|
|
|
|
a[j++]='<tbody><tr>'+
|
|
'<td class="treeNormal" style="border-right:1px solid #A0A0A0;" align="center" valign="middle">'+lab+'</td><td style="width:70px;padding-bottom:2px;padding-left:4px">'
|
|
for (var i in items) a[j++]=items[i].getHTML()
|
|
a[j++]='</td></tr></tbody>'
|
|
|
|
return a.join("")
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_getDynamicHTML()
|
|
// Get the widget HTML
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this
|
|
|
|
var theTable=_curDoc.createElement('table')
|
|
|
|
theTable.id = o.id
|
|
theTable.style.borderTop = _lstNobord
|
|
theTable.cellPadding = 0
|
|
theTable.cellSpacing = 0
|
|
theTable.border = 0
|
|
theTable.innerHTML= o.getInnerHTML()
|
|
|
|
return theTable
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_init()
|
|
// Init the widget layers
|
|
// Return [void]
|
|
{
|
|
var o=this,items=o.items
|
|
o.oldAONodeInit()
|
|
|
|
if (o.layer._counter !=null)
|
|
o.counter=o.layer._counter
|
|
else
|
|
o.layer._counter=o.counter
|
|
|
|
var l=o.operLayer=getLayer('oper_'+o.id)
|
|
|
|
o.operLayerTxt=getLayer('operTxt_'+o.id)
|
|
|
|
l.onmousedown=AndOrNodeWidget_clickCB
|
|
l.onmouseup=AndOrNodeWidget_mouseUp
|
|
|
|
if (_ie)
|
|
l.onmousemove=AndOrNodeWidget_triggerDD
|
|
|
|
l.onkeydown=AndOrNodeWidget_keyDownCB
|
|
addDblClickCB(l,AndOrNodeWidget_dblClickCB)
|
|
|
|
if (o.isDisplayed!=null)
|
|
o.setDisplay(o.isDisplayed)
|
|
|
|
var dd=o.list.dragDrop
|
|
if (_ie&&dd)
|
|
{
|
|
var rl=o.layer.childNodes[0].childNodes[0].childNodes[1]
|
|
|
|
dd.attachCallbacks(rl)
|
|
dd.attachCallbacks(o.layer)
|
|
|
|
o.layer.BODDType=o.par?"node":"root"
|
|
rl.BODDType="nodebg"
|
|
}
|
|
|
|
for (var i in items)
|
|
items[i].init()
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_clickCB(e)
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
o.clicked=true
|
|
|
|
o.initialX=eventGetX(e)
|
|
o.initialY=eventGetY(e)
|
|
|
|
o.select(true)
|
|
|
|
if (list.changeCB)
|
|
list.changeCB()
|
|
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_mouseUp()
|
|
{
|
|
var o=getWidget(this)
|
|
o.clicked=false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_triggerDD(e)
|
|
{
|
|
var o=getWidget(this)
|
|
|
|
if ((o.clicked)&&(_curWin.event.button==_leftBtn))
|
|
{
|
|
if (o.initialX!=null)
|
|
{
|
|
var x=eventGetX(e),y=eventGetY(e),threshold=3
|
|
|
|
if ((x<(o.initialX-threshold))||(x>(o.initialX+threshold))||(y<(o.initialY-threshold))||(y>(o.initialY+threshold)))
|
|
{
|
|
this.dragDrop()
|
|
o.clicked=false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_keyDownCB(e)
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
var key=eventGetKey(e);
|
|
|
|
if (key==46)
|
|
{
|
|
if (list.deleteCB)
|
|
list.deleteCB()
|
|
}
|
|
if(key==13)
|
|
{
|
|
eventCancelBubble(e);
|
|
|
|
if(o.selected)//already selected
|
|
{
|
|
// Change operator
|
|
o.setIsAnd(!o.isAnd)
|
|
if (o.list.andOrCB)
|
|
o.list.andOrCB()
|
|
}
|
|
else
|
|
{
|
|
o.select(true)
|
|
}
|
|
|
|
if (list.changeCB)
|
|
list.changeCB()
|
|
}
|
|
}
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_dblClickCB()
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
// Change operator
|
|
o.setIsAnd(!o.isAnd)
|
|
|
|
if (o.list.andOrCB)
|
|
o.list.andOrCB()
|
|
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_setIsAnd(isAndNode)
|
|
{
|
|
var o=this
|
|
// Change operator
|
|
o.isAnd=isAndNode
|
|
o.operLayerTxt.innerHTML=convStr(o.isAnd?o.andLabel:o.orLabel)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_select(sel)
|
|
// Select the current item
|
|
// sel [boolean]
|
|
// Return [void]
|
|
{
|
|
var o=this,list=o.list
|
|
if (sel)
|
|
list.unselect()
|
|
list.selection=sel?o:null
|
|
o.selected=sel
|
|
|
|
if (o.layer)
|
|
{
|
|
var dy=6+(sel?3:0)
|
|
elasticZoneSetImg(o.operLayer,28,dy,dy+1,dy+2)
|
|
|
|
|
|
if(sel&&o.operLayer.focus&&(!isHidden(o.operLayer)))
|
|
o.operLayer.focus()
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_genericAdd(nodeOrItem,idx)
|
|
// PRIVATE Adds a node or an item
|
|
// nodeOrItem [AndOrNodeWidget or AndOrItemWidget]
|
|
// Return [AndOrNodeWidget or AndOrItemWidget]
|
|
{
|
|
var o=this, list=o.list
|
|
idx=arrayAdd(o,"items",nodeOrItem,idx)
|
|
var items=o.items
|
|
|
|
nodeOrItem.par=o
|
|
nodeOrItem.list=o.list
|
|
|
|
if (o.layer)
|
|
{
|
|
var parNode=o.layer.childNodes[0].childNodes[0].childNodes[1]
|
|
|
|
if ((idx==-1)||(idx==(items.length-1)))
|
|
append(parNode,nodeOrItem.getHTML())
|
|
else
|
|
{
|
|
if (_saf)
|
|
parNode.insertBefore(nodeOrItem.getDynamicHTML(),parNode.childNodes[idx])
|
|
else
|
|
insBefore(parNode.childNodes[idx],nodeOrItem.getHTML())
|
|
}
|
|
|
|
nodeOrItem.init()
|
|
}
|
|
|
|
list.showOrhideRoot()
|
|
|
|
return nodeOrItem
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_addNode(isAnd,value,idx)
|
|
// Adds a node
|
|
// Returns : [AndOrNodeWidget] the new node
|
|
{
|
|
var o=this
|
|
var ret= o.genericAdd(newAndOrNodeWidget(o.id+'_item-'+(o.counter++), isAnd, value),idx)
|
|
|
|
if (o.layer)
|
|
o.layer._counter=o.counter
|
|
|
|
return ret
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_addCopyNode(src,idx)
|
|
{
|
|
var o=this,n=o.addNode(src.isAnd,src.value,idx),srcItems=src.items
|
|
|
|
for (var i in srcItems)
|
|
{
|
|
var item=srcItems[i]
|
|
if (item.isNode())
|
|
n.addCopyNode(item,-1)
|
|
else
|
|
{
|
|
if(item.isAdvFilter)
|
|
n.addAdvFilterItem(item.text,item.imgIndex,item.value,item.tooltip,-1)
|
|
else
|
|
n.addItem(item.text,item.imgIndex,item.value,item.tooltip,-1)
|
|
}
|
|
}
|
|
return n
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_addItem(text,imgIndex,value,tooltip,idx)
|
|
// Adds a node
|
|
// Returns : [void]
|
|
{
|
|
var o=this,last=o.getLastItem()
|
|
var ret=o.genericAdd(newAndOrNodeItem(o.id+'_item-'+(o.counter++),text,imgIndex,value,tooltip),idx)
|
|
var last2=o.getLastItem()
|
|
|
|
if (o.layer)
|
|
{
|
|
if (last&&(last2.id!=last.id))
|
|
last.css.borderBottom=_lstNullbord
|
|
|
|
o.layer._counter=o.counter
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
function AndOrNodeWidget_AdvFilterItem(text,imgIndex,value,tooltip,idx)
|
|
// Adds a node
|
|
// Returns : [void]
|
|
{
|
|
var o=this,last=o.getLastItem()
|
|
var ret=o.genericAdd(newAndOrFilter(o.id+'_item-'+(o.counter++),text,imgIndex,value,tooltip),idx)
|
|
var last2=o.getLastItem()
|
|
|
|
if (o.layer)
|
|
{
|
|
if (last&&(last2.id!=last.id))
|
|
last.css.borderBottom=_lstNullbord
|
|
|
|
o.layer._counter=o.counter
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_removeChild(nodeOrItem)
|
|
// Removes a direct child
|
|
{
|
|
var o=this,items=o.items,len=items.length,list=o.list
|
|
|
|
for (var i=0;i<len;i++)
|
|
{
|
|
var item=items[i]
|
|
if (item.id==nodeOrItem.id)
|
|
{
|
|
var l=item.layer
|
|
|
|
if (item.selected)
|
|
item.select(false)
|
|
|
|
if (l)
|
|
l.parentNode.removeChild(l)
|
|
|
|
arrayRemove(o,"items",i)
|
|
items=o.items
|
|
|
|
var newSel=Math.min(i,items.length-1)
|
|
if (newSel>=0)
|
|
{
|
|
items[newSel].select(true)
|
|
var last=o.getLastItem()
|
|
if (o.layer&&last)
|
|
last.css.borderBottom=_lstNobord
|
|
}
|
|
else o.select(true)
|
|
|
|
list.showOrhideRoot()
|
|
|
|
return true;
|
|
}
|
|
if (item.isNode())
|
|
{
|
|
if (item.removeChild(nodeOrItem))
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeWidget_remove()
|
|
// Remove itself or all the tree except the root
|
|
{
|
|
var o=this
|
|
if (o.par)
|
|
o.par.removeChild(o)
|
|
else
|
|
{
|
|
//delete all child of root
|
|
var items=o.items,len=items.length
|
|
for (var i=len-1;i>=0;i--)
|
|
{
|
|
o.removeChild(items[i])
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// ================================================================================
|
|
// ================================================================================
|
|
//
|
|
// OBJECT newAndOrNodeItem (Constructor)
|
|
//
|
|
// Base class for a filter list OR or AND item (leaf)
|
|
//
|
|
// ================================================================================
|
|
// ================================================================================
|
|
|
|
function newAndOrNodeItem(id,text,imgIndex,value,tooltip)
|
|
// CONSTRUCTOR
|
|
// id [String] the id for DHTML processing
|
|
// text [String] item text
|
|
// imgIndex [int] image index in the combined image
|
|
// value [String] item value - must be unique in the list
|
|
// tooltip [String] tooltip
|
|
// Return [AndOrNodeWidget] the instance
|
|
{
|
|
var o=newWidget(id)
|
|
o.text=text
|
|
o.value=value
|
|
o.tooltip=tooltip?tooltip:''
|
|
o.imgIndex=imgIndex?imgIndex:0
|
|
o.par=null
|
|
o.txtLayer=null
|
|
|
|
o.getHTML=AndOrNodeItem_getHTML
|
|
o.getDynamicHTML=AndOrNodeItem_getDynamicHTML
|
|
o.oldAOItemInit=o.init
|
|
o.init=AndOrNodeItem_init
|
|
o.select=AndOrNodeItem_select
|
|
o.isNode=AndOrNodeItem_isNode
|
|
o.getParentNode=AndOrNodeItem_getParentNode
|
|
o.getIndexInParent=AndOrNodeItem_getIndexInParent
|
|
o.remove=AndOrNodeItem_remove
|
|
o.setText=AndOrNodeItem_setText
|
|
o.setInsertFeedback=AndOrNodeItem_setInsertFeedback
|
|
o.isChildOf=AndOrNodeItem_isChildOf
|
|
|
|
o.fullW=false
|
|
|
|
return o
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_setInsertFeedback(show,isAll)
|
|
{
|
|
var o=this,isLeft=(_dropPosition!=-1),st=o.css,b=show?"#C00000":"#FFFFFF"
|
|
var node=o.isNode()
|
|
|
|
if (isAll)
|
|
{
|
|
st.borderTopColor=st.borderLeftColor=st.borderBottomColor=st.borderRightColor="#FFFFFF"
|
|
|
|
|
|
if (node)
|
|
{
|
|
var dy=show?15:(6+(o.selected?3:0))
|
|
elasticZoneSetImg(o.operLayer,28,dy,dy+1,dy+2)
|
|
}
|
|
else
|
|
{
|
|
var dy=show?12:(o.selected?3:0)
|
|
elasticZoneSetImg(o.layer,28,dy,dy+1,dy+1,dy+2)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var isVert=((o.list.layout==_vertBOList)||(o.list.layout==_andOrBOList))
|
|
|
|
// Case of insersion into an empty node
|
|
if (_dropParentWidget&&(_dropFeebackWidget.id==_dropParentWidget.id))
|
|
{
|
|
var feedLayer=o.layer.childNodes[0].childNodes[0].childNodes[1],feedCSS=feedLayer.style
|
|
feedCSS.borderLeft=show?_lstBord:_lstNullbord
|
|
feedLayer.innerHTML=show?' ':''
|
|
}
|
|
else
|
|
{
|
|
if (isLeft)
|
|
{
|
|
if (isVert)
|
|
st.borderTopColor=b
|
|
else
|
|
st.borderLeftColor=b
|
|
}
|
|
else
|
|
{
|
|
if (isVert)
|
|
st.borderBottomColor=b
|
|
else
|
|
st.borderRightColor=b
|
|
}
|
|
|
|
if (node)
|
|
{
|
|
var dy=6+(o.selected?3:0)
|
|
elasticZoneSetImg(o.operLayer,28,dy,dy+1,dy+2)
|
|
}
|
|
else
|
|
{
|
|
var dy=(o.selected?3:0)
|
|
elasticZoneSetImg(o.layer,28,dy,dy+1,dy+1,dy+2)
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_getParentNode()
|
|
// Return [AndOrNodeWidget] the parent node
|
|
{
|
|
return this.par
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_isNode()
|
|
// Test if it's a node
|
|
{
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_init()
|
|
// Initialization
|
|
// Returns : [void]
|
|
{
|
|
var o=this
|
|
o.oldAOItemInit()
|
|
o.layer.onmousedown=AndOrNodeItem_clickCB
|
|
o.layer.onmouseup=AndOrNodeItem_mouseupCB
|
|
if (_ie)
|
|
o.layer.onmousemove=AndOrNodeWidget_triggerDD
|
|
|
|
o.layer.onkeydown=AndOrNodeItem_keyDownCB
|
|
addDblClickCB(o.layer,AndOrNodeItem_dblClickCB)
|
|
|
|
o.layer.title=o.tooltip
|
|
|
|
var dd=o.list.dragDrop
|
|
if (_ie&&dd)
|
|
{
|
|
dd.attachCallbacks(o.layer)
|
|
o.layer.BODDType="item"
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_getHTML()
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this, list=o.list;
|
|
var topBorder=((list.layout==_vertBOList)||(list.layout==_andOrBOList))
|
|
var bottomBorder=(o.par.getLastItem().id==o.id)?topBorder:null
|
|
|
|
//only display 10 first caracters of the name
|
|
var text=o.text
|
|
if(list.layout!=_andOrBOList && !list.autofit)
|
|
{
|
|
if(text.length>10) text=text.slice(0,10)+"..."
|
|
}
|
|
return elasticZone(text,_skin+'bolist.gif',3,28,o.selected?84:0,o.id,'treeNormal',o.list.image,0,o.imgIndex*16,null,'AndOrItemTxt_'+o.id,o.fullW,topBorder,bottomBorder)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_getDynamicHTML()
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this
|
|
var topBorder=((this.list.layout==_vertBOList)||(this.list.layout==_andOrBOList))
|
|
var bottomBorder=(o.par.getLastItem().id==o.id)?topBorder:null
|
|
|
|
//only display 10 first caracters of the name
|
|
var text=o.text
|
|
if(this.list.layout!=_andOrBOList)
|
|
{
|
|
if(text.length>10) text=text.slice(0,10)+"..."
|
|
}
|
|
return dynamicElasticZone(text,_skin+'bolist.gif',3,28,o.selected?84:0,o.id,'treeNormal',o.list.image,0,o.imgIndex*16,null,'AndOrItemTxt_'+o.id,o.fullW,topBorder,bottomBorder)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_clickCB(e)
|
|
// HTML Callback
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
o.select(true)
|
|
o.clicked=true
|
|
|
|
o.initialX=eventGetX(e)
|
|
o.initialY=eventGetY(e)
|
|
|
|
if (list.changeCB)
|
|
list.changeCB()
|
|
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_mouseupCB()
|
|
{
|
|
var o=getWidget(this)
|
|
o.clicked=false
|
|
}
|
|
|
|
// ================================================================================
|
|
function AndOrNodeItem_keyDownCB(e)
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
var key=eventGetKey(e);
|
|
|
|
if (key==46)
|
|
{
|
|
if (list.deleteCB)
|
|
list.deleteCB()
|
|
}
|
|
if(key==13)
|
|
{
|
|
eventCancelBubble(e);
|
|
|
|
o.select(true)
|
|
|
|
if (list.changeCB)
|
|
list.changeCB()
|
|
}
|
|
}
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_dblClickCB()
|
|
// HTML Callback
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
|
|
if (list.dblClickCB)
|
|
list.dblClickCB()
|
|
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_select(sel)
|
|
// Select the current item
|
|
{
|
|
var o=this,list=o.list
|
|
if (sel)
|
|
list.unselect()
|
|
list.selection=sel?o:null
|
|
o.selected=sel
|
|
|
|
if (o.layer)
|
|
{
|
|
var dy=sel?3:0
|
|
elasticZoneSetImg(o.layer,28,dy,dy+1,dy+1,dy+2)
|
|
|
|
if(sel)
|
|
o.layer.title=_lstSelectedLabel+" "+o.tooltip
|
|
else
|
|
o.layer.title=o.tooltip
|
|
|
|
if(sel&&o.layer.focus&&(!isHidden(o.layer)))
|
|
o.layer.focus()
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_remove()
|
|
// Remove itself
|
|
{
|
|
var o=this
|
|
if (o.par)
|
|
o.par.removeChild(o)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_getIndexInParent()
|
|
// return [int] index in parent node (-1 if no parent)
|
|
{
|
|
var o=this,par=o.par
|
|
return par?par.getChildIndex(o):-1
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_setText(text)
|
|
// Remove itself
|
|
{
|
|
var o=this
|
|
if (o.txtLayer==null)
|
|
o.txtLayer=getLayer("AndOrItemTxt_"+o.id)
|
|
|
|
o.text=text
|
|
o.txtLayer.innerHTML=convStr(o.text,true)
|
|
|
|
o.tooltip=text
|
|
o.layer.title=o.tooltip
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrNodeItem_isChildOf(node)
|
|
// Tests if node is a parent
|
|
// return [boolean]
|
|
{
|
|
var p=this.par
|
|
|
|
if (p==null)
|
|
return false
|
|
if (p.id==node.id)
|
|
return true
|
|
else
|
|
return p.isChildOf(node)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function elasticZoneInner(text,url,w,h,dy,id,cls,img,imgDx,imgDy,att,txtId,fullW,topBorder,bottomBorder,crs,extraHTML)
|
|
// Create a zone with a left image, a
|
|
{
|
|
var bodyHTML ='';
|
|
if(extraHTML)
|
|
//bodyHTML = '<div '+attr("id",txtId)+' class="'+cls+'" style="width:0px">'+extraHTML+'</div>'
|
|
bodyHTML = '<table '+attr("id",txtId)+' class="'+cls+'" cellpadding="0" cellspacing="0" border="0"><tr valign="middle"><td>'+extraHTML+'</td></tr></table>'
|
|
else
|
|
bodyHTML = '<nobr '+attr("id",txtId)+' class="'+cls+'">'+convStr(text,true)+'</nobr>'
|
|
|
|
return '<tbody><tr valign="middle"><td width="'+w+'">'+imgOffset(url,w,h,0,dy)+'</td>'+
|
|
(img?('<td style="padding-left:2px;'+backImgOffset(url,0,dy+h)+'">'+imgOffset(img,16,16,imgDx,imgDy)+'</td>'):'')+
|
|
'<td '+(att?att:'')+' '+(fullW? 'width="100%"':'')+' style="padding-left:2px;padding-right:'+(img?8:4)+'px;'+backImgOffset(url,0,dy+h)+'">'+bodyHTML+'</td><td width="'+w+'">'+imgOffset(url,w,h,0,dy+(2*h))+'</td></tr></tbody>'
|
|
}
|
|
|
|
|
|
// ================================================================================
|
|
|
|
function elasticZone(text,url,w,h,dy,id,cls,img,imgDx,imgDy,att,txtId,fullW,topBorder,bottomBorder,crs,extraHTML)
|
|
// Create a zone with a left image, a
|
|
{
|
|
var s=""
|
|
if (topBorder!=null)
|
|
s+=(topBorder?"border-top:":"border-left:")+_lstNobord+";"
|
|
|
|
if (bottomBorder!=null)
|
|
s+=(bottomBorder?"border-bottom:":"border-right:")+_lstNobord+";"
|
|
|
|
crs=crs?crs:_hand
|
|
|
|
return '<table '+attr("id",id)+' boelastic="1" tabIndex="0" '+(fullW?'width="100%"':'')+' cellpadding="0" cellspacing="0" border="0" style="'+s+'cursor:'+crs+'" height="'+h+'">' +
|
|
elasticZoneInner(text,url,w,h,dy,id,cls,img,imgDx,imgDy,att,txtId,fullW,topBorder,bottomBorder,crs,extraHTML) +
|
|
'</table>'
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function dynamicElasticZone(text,url,w,h,dy,id,cls,img,imgDx,imgDy,att,txtId,fullW,topBorder,bottomBorder,crs,extraHTML)
|
|
// Create a zone with a left image, a
|
|
{
|
|
crs=crs?crs:_hand
|
|
|
|
var theTable=_curDoc.createElement('table')
|
|
|
|
if (topBorder!=null)
|
|
{
|
|
if (topBorder)
|
|
theTable.style.borderTop = _lstNobord
|
|
else
|
|
theTable.style.borderLeft = _lstNobord
|
|
}
|
|
|
|
if (bottomBorder!=null)
|
|
{
|
|
if (bottomBorder)
|
|
theTable.style.borderBottom = _lstNobord
|
|
else
|
|
theTable.style.borderRight = _lstNobord
|
|
}
|
|
|
|
|
|
theTable.id = id
|
|
theTable.setAttribute("boelastic","1")
|
|
theTable.tabIndex = 0
|
|
|
|
if (fullW)
|
|
theTable.width="100%"
|
|
|
|
theTable.cellPadding = 0
|
|
theTable.cellSpacing = 0
|
|
theTable.border = 0
|
|
|
|
theTable.style.cursor = crs
|
|
theTable.height = h
|
|
theTable.innerHTML= elasticZoneInner(text,url,w,h,dy,id,cls,img,imgDx,imgDy,att,txtId,fullW,topBorder,bottomBorder,crs,extraHTML)
|
|
|
|
return theTable
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function elasticZoneSetImg(lyr,h,dy1,dy2,dy3,dy4)
|
|
{
|
|
if (lyr&&(lyr.getAttribute("boelastic")!=null))
|
|
{
|
|
var c=lyr.childNodes[0].childNodes[0].childNodes,j=1,len=c.length
|
|
|
|
for (var i=0;i<len;i++)
|
|
{
|
|
var ce=c[i]
|
|
if (ce.tagName!=null)
|
|
changeOffset(((j==1||j==(len))?ce.childNodes[0]:ce),0,h*eval('dy'+(j++)))
|
|
}
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
|
|
// ================================================================================
|
|
// ================================================================================
|
|
//
|
|
// OBJECT newAndOrFilter (Constructor)
|
|
//
|
|
// Base class for a filter list OR or AND item (leaf)
|
|
//
|
|
// ================================================================================
|
|
// ================================================================================
|
|
|
|
function newAndOrFilter(id,text,imgIndex,value,tooltip)
|
|
// CONSTRUCTOR
|
|
// id [String] the id for DHTML processing
|
|
// filter [Object] filter structure
|
|
// imgIndex [int] image index in the combined image
|
|
// value [String] item value - must be unique in the list
|
|
// tooltip [String] tooltip
|
|
// Return [AndOrNodeWidget] the instance
|
|
{
|
|
var o=newWidget(id)
|
|
o.text=text
|
|
o.isAdvFilter=true;
|
|
|
|
o.value=value
|
|
o.tooltip=tooltip?tooltip:''
|
|
o.imgIndex=imgIndex?imgIndex:0
|
|
o.par=null
|
|
o.txtLayer=null
|
|
|
|
o.operatorCombo=newCustomCombo('AndOrFilterOperator_'+id,operator_changeCB,true,null);
|
|
o.operatorCombo.par=o
|
|
AndOrFilter_initOpCombo(o.operatorCombo);
|
|
|
|
o.defZone=newAdvFilterDef('AndOrFilterDefinition_'+id);
|
|
o.defZone2=newAdvFilterDef('AndOrFilterDefinition2_'+id);
|
|
o.defZone.par=o
|
|
o.defZone2.par=o
|
|
|
|
o.getHTML=AndOrFilter_getHTML
|
|
o.getExtraHTML=AndOrFilter_getExtraHTML
|
|
o.getDynamicHTML=AndOrFilter_getDynamicHTML
|
|
o.oldAOItemInit=o.init
|
|
o.init=AndOrFilter_init
|
|
o.select=AndOrFilter_select
|
|
o.isNode=AndOrFilter_isNode
|
|
o.getParentNode=AndOrFilter_getParentNode
|
|
o.getIndexInParent=AndOrFilter_getIndexInParent
|
|
o.remove=AndOrFilter_remove
|
|
o.setText=AndOrFilter_setText
|
|
o.setInsertFeedback=AndOrFilter_setInsertFeedback
|
|
o.isChildOf=AndOrFilter_isChildOf
|
|
|
|
o.getDefinition=AndOrFilter_getDefinition
|
|
|
|
o.fullW=false
|
|
|
|
return o
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_setInsertFeedback(show,isAll)
|
|
{
|
|
var o=this,isLeft=(_dropPosition!=-1),st=o.css,b=show?"#C00000":"#FFFFFF"
|
|
var node=o.isNode()
|
|
|
|
if (isAll)
|
|
{
|
|
st.borderTopColor=st.borderLeftColor=st.borderBottomColor=st.borderRightColor="#FFFFFF"
|
|
|
|
|
|
if (node)
|
|
{
|
|
var dy=show?15:(6+(o.selected?3:0))
|
|
elasticZoneSetImg(o.operLayer,28,dy,dy+1,dy+2)
|
|
}
|
|
else
|
|
{
|
|
var dy=show?12:(o.selected?3:0)
|
|
elasticZoneSetImg(o.layer,28,dy,dy+1,dy+1,dy+2)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var isVert=((o.list.layout==_vertBOList)||(o.list.layout==_andOrBOList))
|
|
|
|
// Case of insersion into an empty node
|
|
if (_dropParentWidget&&(_dropFeebackWidget.id==_dropParentWidget.id))
|
|
{
|
|
var feedLayer=o.layer.childNodes[0].childNodes[0].childNodes[1],feedCSS=feedLayer.style
|
|
feedCSS.borderLeft=show?_lstBord:_lstNullbord
|
|
feedLayer.innerHTML=show?' ':''
|
|
}
|
|
else
|
|
{
|
|
if (isLeft)
|
|
{
|
|
if (isVert)
|
|
st.borderTopColor=b
|
|
else
|
|
st.borderLeftColor=b
|
|
}
|
|
else
|
|
{
|
|
if (isVert)
|
|
st.borderBottomColor=b
|
|
else
|
|
st.borderRightColor=b
|
|
}
|
|
|
|
if (node)
|
|
{
|
|
var dy=6+(o.selected?3:0)
|
|
elasticZoneSetImg(o.operLayer,28,dy,dy+1,dy+2)
|
|
}
|
|
else
|
|
{
|
|
var dy=(o.selected?3:0)
|
|
elasticZoneSetImg(o.layer,28,dy,dy+1,dy+1,dy+2)
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_getParentNode()
|
|
// Return [AndOrNodeWidget] the parent node
|
|
{
|
|
return this.par
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_isNode()
|
|
// Test if it's a node
|
|
{
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_init()
|
|
// Initialization
|
|
// Returns : [void]
|
|
{
|
|
var o=this
|
|
o.oldAOItemInit()
|
|
|
|
o.operatorCombo.init();
|
|
o.defZone.init();
|
|
o.defZone2.init();
|
|
o.defZone2.setDisplay(false);
|
|
|
|
o.layer.onmousedown=AndOrFilter_clickCB
|
|
o.layer.onmouseup=AndOrFilter_mouseupCB
|
|
if (_ie)
|
|
o.layer.onmousemove=AndOrNodeWidget_triggerDD
|
|
|
|
o.layer.onkeydown=AndOrFilter_keyDownCB
|
|
addDblClickCB(o.layer,AndOrFilter_dblClickCB)
|
|
|
|
o.layer.title=o.tooltip
|
|
|
|
var dd=o.list.dragDrop
|
|
if (_ie&&dd)
|
|
{
|
|
dd.attachCallbacks(o.layer)
|
|
o.layer.BODDType="item"
|
|
}
|
|
}
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_getExtraHTML()
|
|
{
|
|
var o=this,s="";
|
|
s+='<table class="treeNormal" border="0" cellspacing="0" cellpadding="0"><tr valign="middle"><td>';
|
|
s+=o.text+'</td><td>';
|
|
s+=o.operatorCombo.getHTML();
|
|
s+='</td><td>';
|
|
s+=o.defZone.getHTML();
|
|
s+='</td><td>';
|
|
s+=o.defZone2.getHTML();
|
|
s+='</td></tr></table>';
|
|
return s;
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_getHTML()
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this, list=o.list;
|
|
var topBorder=((list.layout==_vertBOList)||(list.layout==_andOrBOList))
|
|
var bottomBorder=(o.par.getLastItem().id==o.id)?topBorder:null
|
|
|
|
//only display 10 first caracters of the name
|
|
var text=o.text
|
|
if(list.layout!=_andOrBOList && !list.autofit)
|
|
{
|
|
if(text.length>10) text=text.slice(0,10)+"..."
|
|
}
|
|
return elasticZone(text,_skin+'bolist.gif',3,28,o.selected?84:0,o.id,'treeNormal',o.list.image,0,o.imgIndex*16,null,'AndOrFilterTxt_'+o.id,o.fullW,topBorder,bottomBorder,null,o.getExtraHTML())
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_getDynamicHTML()
|
|
// Returns : [String] the HTML
|
|
{
|
|
var o=this
|
|
var topBorder=((this.list.layout==_vertBOList)||(this.list.layout==_andOrBOList))
|
|
var bottomBorder=(o.par.getLastItem().id==o.id)?topBorder:null
|
|
|
|
//only display 10 first caracters of the name
|
|
var text=o.text
|
|
if(this.list.layout!=_andOrBOList)
|
|
{
|
|
if(text.length>10) text=text.slice(0,10)+"..."
|
|
}
|
|
return dynamicElasticZone(text,_skin+'bolist.gif',3,28,o.selected?84:0,o.id,'treeNormal',o.list.image,0,o.imgIndex*16,null,'AndOrFilterTxt_'+o.id,o.fullW,topBorder,bottomBorder,null,o.getExtraHTML())
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_clickCB(e)
|
|
// HTML Callback
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
o.select(true)
|
|
o.clicked=true
|
|
|
|
o.initialX=eventGetX(e)
|
|
o.initialY=eventGetY(e)
|
|
|
|
if (list.changeCB)
|
|
list.changeCB()
|
|
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_mouseupCB()
|
|
{
|
|
var o=getWidget(this)
|
|
o.clicked=false
|
|
}
|
|
|
|
// ================================================================================
|
|
function AndOrFilter_keyDownCB(e)
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
var key=eventGetKey(e);
|
|
|
|
if (key==46)
|
|
{
|
|
if (list.deleteCB)
|
|
list.deleteCB()
|
|
}
|
|
if(key==13)
|
|
{
|
|
eventCancelBubble(e);
|
|
|
|
o.select(true)
|
|
|
|
if (list.changeCB)
|
|
list.changeCB()
|
|
}
|
|
}
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_dblClickCB()
|
|
// HTML Callback
|
|
{
|
|
var o=getWidget(this),list=o.list
|
|
|
|
if (list.dblClickCB)
|
|
list.dblClickCB()
|
|
|
|
return false
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_select(sel)
|
|
// Select the current item
|
|
{
|
|
var o=this,list=o.list
|
|
if (sel)
|
|
list.unselect()
|
|
list.selection=sel?o:null
|
|
o.selected=sel
|
|
|
|
if (o.layer)
|
|
{
|
|
var dy=sel?3:0
|
|
elasticZoneSetImg(o.layer,28,dy,dy+1,dy+1,dy+2)
|
|
|
|
if(sel)
|
|
o.layer.title=_lstSelectedLabel+" "+o.tooltip
|
|
else
|
|
o.layer.title=o.tooltip
|
|
|
|
if(sel&&o.layer.focus&&(!isHidden(o.layer)))
|
|
o.layer.focus()
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_remove()
|
|
// Remove itself
|
|
{
|
|
var o=this
|
|
if (o.par)
|
|
o.par.removeChild(o)
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_getIndexInParent()
|
|
// return [int] index in parent node (-1 if no parent)
|
|
{
|
|
var o=this,par=o.par
|
|
return par?par.getChildIndex(o):-1
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_setText(text)
|
|
// Remove itself
|
|
{
|
|
var o=this
|
|
if (o.txtLayer==null)
|
|
o.txtLayer=getLayer("AndOrFilterTxt_"+o.id)
|
|
|
|
o.text=text
|
|
o.txtLayer.innerHTML=convStr(o.text,true)
|
|
|
|
o.tooltip=text
|
|
o.layer.title=o.tooltip
|
|
}
|
|
|
|
// ================================================================================
|
|
|
|
function AndOrFilter_isChildOf(node)
|
|
// Tests if node is a parent
|
|
// return [boolean]
|
|
{
|
|
var p=this.par
|
|
|
|
if (p==null)
|
|
return false
|
|
if (p.id==node.id)
|
|
return true
|
|
else
|
|
return p.isChildOf(node)
|
|
}
|
|
|
|
// ================================================================================
|
|
function AndOrFilter_getDefinition()
|
|
// get the included AndOrBOListWidget
|
|
// return [AndOrBOListWidget]
|
|
{
|
|
return this.defZone
|
|
}
|
|
// ================================================================================
|
|
function AndOrFilter_initOpCombo(fope)
|
|
{
|
|
fope.icon.setClasses("iconnochecknobg", "iconchecknobg", "iconhovernobg", "iconcheckhovernobg")
|
|
fope.arrow.setClasses("iconnochecknobg", "iconchecknobg", "iconhovernobg", "iconcheckhovernobg")
|
|
fope.arrow.overCB="IconWidget_overCB"
|
|
fope.arrow.outCB="IconWidget_outCB"
|
|
fope.icon.overCB="IconWidget_overCB"
|
|
fope.icon.outCB="IconWidget_outCB"
|
|
fope.icon.width=null;
|
|
/*
|
|
for (var i=_topfs._firstFilter;i<=_topfs._lastFilter;i++)
|
|
{
|
|
fope.add(_topfs._labFil[i],""+i);
|
|
}
|
|
*/
|
|
|
|
fope.add("EQUAL","EQUAL");
|
|
fope.add("NOT_EQUAL","NOT_EQUAL");
|
|
fope.add("GREATER","GREATER");
|
|
fope.add("GREATER_OR_EQUAL","GREATER_OR_EQUAL");
|
|
fope.add("LESS","LESS");
|
|
fope.add("LESS_OR_EQUAL","LESS_OR_EQUAL");
|
|
fope.add("BETWEEN","BETWEEN");
|
|
fope.add("NOT_BETWEEN","NOT_BETWEEN");
|
|
fope.add("IN_LIST","IN_LIST",true);
|
|
fope.add("NOT_IN_LIST","NOT_IN_LIST");
|
|
fope.add("IS_NULL","IS_NULL");
|
|
fope.add("NOT_IS_NULL","NOT_IS_NULL");
|
|
fope.add("LIKE","LIKE");
|
|
fope.add("NOT_LIKE","NOT_LIKE");
|
|
fope.add("BOTH","BOTH");
|
|
fope.add("EXCEPT","EXCEPT");
|
|
}
|
|
|
|
// ================================================================================
|
|
function operator_changeCB()
|
|
{
|
|
var o=this, sel = o.getSelection()
|
|
var advflt= o.par;
|
|
if(sel && advflt)
|
|
{
|
|
switch(sel.value)
|
|
{
|
|
case "BETWEEN" :
|
|
case "NOT_BETWEEN" :
|
|
case "BOTH" :
|
|
advflt.defZone2.setDisplay(true);
|
|
break;
|
|
case "IS_NULL" :
|
|
case "NOT_IS_NULL" :
|
|
advflt.defZone.setDisplay(false);
|
|
advflt.defZone2.setDisplay(false);
|
|
break;
|
|
default :
|
|
advflt.defZone.setDisplay(true);
|
|
advflt.defZone2.setDisplay(false);
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
// ================================================================================
|
|
// AdvFilterDef: definition zone of the filter
|
|
// ================================================================================
|
|
|
|
_filterDefConst=1
|
|
_filterDefFromList=2
|
|
_filterDefPrompt=3
|
|
_filterDefObj=4
|
|
|
|
function newAdvFilterDef(id)
|
|
{
|
|
var o=newWidget(id);
|
|
|
|
o.type=_filterDefPrompt;
|
|
o.obj=null;
|
|
o.input="prompt by default ?";
|
|
|
|
o.objLabel= newWidget(id+"_objlabel");
|
|
o.inputTxt= newTextFieldWidget(id+"_input",null,null,null,null);
|
|
|
|
o.propertyIcn=newIconWidget(id+"_property",_skin+"promptProp.gif",clickPropCB,null,null,16,16,0,0);
|
|
o.typeIcn=newIconWidget(id+"_type",_skin+"filterType.gif",clickTypeCB,null,null,16,16,0,0);
|
|
o.propertyIcn.setClasses("iconnochecknobg", "iconchecknobg", "iconhovernobg", "iconcheckhovernobg");
|
|
o.typeIcn.setClasses("iconnochecknobg", "iconchecknobg", "iconhovernobg", "iconcheckhovernobg");
|
|
|
|
var m=o.typeMenu=newMenuWidget(id+"_type_menu");
|
|
|
|
//build filter type menu
|
|
m.addCheck("advf_constant","Constant",changeFTypeCB);
|
|
m.addCheck("advf_fromList","From List",changeFTypeCB);
|
|
m.addCheck("advf_prompt","Prompt",changeFTypeCB);
|
|
m.addCheck("advf_object","Object",changeFTypeCB);
|
|
|
|
o.inputTxt.afPar=o;
|
|
o.propertyIcn.afPar=o;
|
|
o.typeIcn.afPar=o;
|
|
o.typeMenu.afPar=o;
|
|
|
|
|
|
o.oldInit=o.init
|
|
o.init=AdvFilterDef_init
|
|
o.getHTML=AdvFilterDef_getHTML
|
|
o.updateUI=AdvFilterDef_updateUI
|
|
|
|
return o;
|
|
}
|
|
|
|
function AdvFilterDef_getHTML()
|
|
{
|
|
var o=this;
|
|
|
|
return(
|
|
'<table id="'+o.id+'" border="0" cellspacing="0" cellpadding="0"><tbody>'+
|
|
'<tr>'+
|
|
'<td id="'+o.id+'_objlabel">'+
|
|
'<table class="treeNormal" border="0" cellspacing="0" cellpadding="0"><tr><td>'+imgOffset(_skin+"qualification.gif",16,16,0,0)+'</td><td><nobr>my object</nobr></td></tr></table>'+
|
|
'</td><td>'+
|
|
o.inputTxt.getHTML()+
|
|
'</td><td>'+
|
|
o.propertyIcn.getHTML()+
|
|
'</td><td>'+
|
|
o.typeIcn.getHTML()+
|
|
'</td>'+
|
|
'</tr>'+
|
|
'</tbody></table>');
|
|
}
|
|
|
|
function AdvFilterDef_init()
|
|
{
|
|
var o=this;
|
|
|
|
//init widget
|
|
o.oldInit();
|
|
o.objLabel.init();
|
|
o.inputTxt.init();
|
|
o.propertyIcn.init();
|
|
o.typeIcn.init();
|
|
|
|
//update UI depending on the type of filter
|
|
o.updateUI();
|
|
}
|
|
|
|
function changeFTypeCB()
|
|
{
|
|
var id = this.id;
|
|
var menu=this.par,items=menu.items
|
|
var o=menu.afPar;//AdvFilterDef objet
|
|
|
|
for (var i in items)
|
|
{
|
|
var item=items[i]
|
|
item.check(item.id==id)
|
|
}
|
|
|
|
switch(id)
|
|
{
|
|
case "advf_constant" :
|
|
o.type = _filterDefConst;
|
|
break;
|
|
case "advf_fromList" :
|
|
o.type = _filterDefFromList;
|
|
alert("lov dialog");
|
|
break;
|
|
case "advf_prompt" :
|
|
o.type = _filterDefPrompt;
|
|
break;
|
|
case "advf_object" :
|
|
o.type = _filterDefObj;
|
|
alert("universe dimensions dialog");
|
|
break;
|
|
}
|
|
o.updateUI();
|
|
}
|
|
|
|
function AdvFilterDef_updateUI()
|
|
{
|
|
var o=this;
|
|
|
|
switch(o.type)
|
|
{
|
|
case _filterDefConst :
|
|
o.objLabel.setDisplay(false);
|
|
o.inputTxt.setDisplay(true);
|
|
o.inputTxt.setValue("");
|
|
o.propertyIcn.setDisplay(false);
|
|
o.typeMenu.getItemByID("advf_constant").check(true);
|
|
break;
|
|
case _filterDefFromList :
|
|
o.objLabel.setDisplay(false);
|
|
o.inputTxt.setDisplay(true);
|
|
o.inputTxt.setValue("");
|
|
o.propertyIcn.setDisplay(false);
|
|
o.typeMenu.getItemByID("advf_fromList").check(true);
|
|
break;
|
|
case _filterDefPrompt :
|
|
o.objLabel.setDisplay(false);
|
|
o.inputTxt.setDisplay(true);
|
|
o.inputTxt.setValue(o.input);
|
|
o.propertyIcn.setDisplay(true);
|
|
o.typeMenu.getItemByID("advf_prompt").check(true);
|
|
break;
|
|
case _filterDefObj :
|
|
o.objLabel.setDisplay(true);
|
|
o.inputTxt.setDisplay(false);
|
|
o.propertyIcn.setDisplay(false);
|
|
o.typeMenu.getItemByID("advf_object").check(true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function clickPropCB()
|
|
{
|
|
alert("prompt property dialog");
|
|
}
|
|
|
|
function clickTypeCB()
|
|
{
|
|
var o=this.afPar, icn = this, l=icn.layer,menu=o.typeMenu;
|
|
menu.show(true,getPosScrolled(l).x + (menu.alignLeft?icn.getWidth():0) ,getPosScrolled(l).y+icn.getHeight()+1);
|
|
IconWidget_overCB(icn.index)
|
|
|
|
}
|
|
|
|
|
|
|