📄 treebar.js
字号:
Class("linb.UI.TreeBar",["linb.UI","linb.absList","linb.absValue"],{
Instance:{
_setCtrlValue:function(value, flag){
return this.each(function(profile){
if(!profile.domNode)return;
var box = profile.boxing(),
uiv = box.getUIValue(),
properties = profile.properties,
fun=function(key,o,b){
profile.getSubNodeByItemId(key, o).tagClass('-checked', b);
},
selmode=properties.selMode
;
if(selmode=='single'){
var itemId = profile.getSubIdByItemId(uiv);
if(uiv && itemId)
profile.getSubNodes(['BAR','MARK2'],itemId).tagClass('-checked',false);
itemId = profile.getSubIdByItemId(value);
if(itemId)
profile.getSubNodes(['BAR','MARK2'],itemId).tagClass('-checked');
}else if(selmode=='multi'){
uiv = uiv?uiv.split(';'):[];
value = value?value.split(';'):[];
if(flag){
_.arr.each(value,function(o){
fun('BAR', o);
fun('MARK2', o);
});
}else{
//check all
_.arr.each(uiv,function(o){
if(_.arr.indexOf(value,o)==-1){
fun('BAR', o, false);
fun('MARK2', o, false);
}
});
_.arr.each(value,function(o){
if(_.arr.indexOf(uiv,o)==-1){
fun('BAR', o);
fun('MARK2', o);
}
});
}
}
});
},
insertItems:function(arr, pid, base ,before){
var node;
return this.each(function(profile){
// prepare properties format
var tar,r,k;
if(!pid){
k=profile.properties;
tar = k.items ||(k.items=[])
}else{
k=profile.getItemByItemId(pid);
tar = k.sub || (k.sub= []);
}
if(profile.domNode){
if(!base){
if(!pid)
node=profile.getSubNode('ITEMS');
else if(pid && k._created)
node=profile.getSubNodeByItemId('SUB', pid);
if(node){
r=_.str.toDom(profile.buildItems('items', profile.box._prepareItems(profile, arr, pid)));
if(before)
node.prepend(r);
else
node.append(r);
}
}else{
node=profile.getSubNodeByItemId('ITEM', base);
if(node){
r=_.str.toDom(profile.buildItems('items', profile.box._prepareItems(profile, arr, pid)));
if(before)
node.addPrev(r);
else
node.addNext(r);
}
}
}
//must be here
if(!base)
_.arr.insertAny(tar,arr, before?0:-1);
else{
var index = _.arr.subIndexOf(tar, 'id', base);
_.arr.insertAny(tar,arr, before?index:(index+1));
}
var obj;
if(pid)
if((obj=profile.getSubNodeByItemId('TOGGLE', pid)).css('display')=='none')
obj.setInlineBlock();
//open parent node
if(!(('iniFold' in k)?k.iniFold:profile.properties.iniFold))
if(!pid || profile.getItemByItemId(pid)._created)
profile.boxing()._toggleNodes(arr, true);
});
},
_toggleNodes:function(items, expend, recursive){
var self=this;
_.arr.each(items,function(o){
self.toggleNode(o.id, expend, recursive)
});
return self;
},
/*
*expend:true->expend false->fold
*recursive:true open recursively
*/
toggleNode:function(id, expend, recursive){
var profile=this.get(0),
o=profile.getItemByItemId(id);
if(o && o.sub)
profile.box._setSub(profile, o, typeof expend=="boolean"?expend:!o._checked, recursive);
return self;
},
/*
*open to deep node
*/
openToNode:function(id){
return this.each(function(profile){
var res=false, a=[],
fun=function(arr, catId, layer){
layer = layer || 0;
var me=arguments.callee;
_.arr.each(arr,function(o){
if(o.id==catId){
a.push(o);
res=true;
return false;
}
if(o.sub){
res = me.call(me, o.sub, catId, ++layer)
if(res){
a.push(o);
return false;
}
}
});
return res;
}
fun(profile.properties.items, id);
if(res){
a.reverse();
_.arr.each(a,function(o){
if(o.sub){
if(!o._checked)
profile.box._setSub(profile, o, true);
}else
profile.boxing().fireItemClickEvent(o.id);
});
}
});
},
fireItemClickEvent:function(subId){
this.getSubNodeByItemId('BAR', subId).onClick();
return this;
}
},
Initialize:function(){
this.addTemplateKeys(['DISABLED']);
},
Static:{
Templates:{
tagName : 'div',
style:'{_style}',
ondrag:'return false',
onselectstart:'return false',
BORDER:{
tagName : 'div',
BOX:{
tagName : 'div',
onselectstart:'return false',
ITEMS:{
tagName : 'div',
text:"{items}"
}
}
},
$dynamic:{
items:{
ITEM:{
className:'{itemClass} {disabled}',
style:'{itemStyle}',
tagName : 'div',
onselectstart:'return false',
unselectable:'on',
BAR:{
$order:0,
tagName: 'a',
href :"{href}",
tabindex: '{_tabindex}',
className:'{cls_group} ',
onselectstart:'return false',
unselectable:'on',
TOGGLE:{
$order:0,
className:'uicmd-toggle',
style:'{mark}'
},
MARK2:{
$order:1,
style:'{mark2Display}'
},
ITEMICON:{
style:'background:url({image}) transparent no-repeat {imagePos}; {iconDisplay}',
className:'ui-icon',
$order:2
},
ITEMCAPTION:{
text : ' {caption}',
className:"{disabled} ",
$order:3
}
},
SUB:{
$order:1,
tagName : 'div',
text:linb.UI.$childTag
}
}
}
}
},
Appearances:{
KEY: {
'font-family': 'Verdana, Helvetica, sans-serif',
'border':0
},
BOX:{
left:0,
overflow: 'auto',
'overflow-x':(linb.browser.ie ||linb.browser.gek)?'hidden':'',
position:'relative'
},
ITEMS:{
overflow: 'hidden'
},
ITEM:{
'white-space': 'nowrap',
position:'relative',
overflow:'hidden'
},
BAR:{
cursor:'pointer',
zoom:linb.browser.ie?1:null,
position:'relative',
display:'block',
overflow: 'hidden',
'font-size':'12px',
padding:'2px 0',
border: '1px solid',
'border-color':'#EDF4FC #698AB3 #698AB3 #698AB3',
'background-color':'#CCE4FC'
},
DISABLED:{
color:'#808080'
},
'BAR-mouseover':{
$order:1,
'background-color': '#fffa9f'
},
'BAR-checked':{
$order:2,
'background-color': '#fffa9f'
},
'BAR-GROUP':{
$order:2,
'border-top': 'none',
'border-bottom': 'none',
padding:'5px 0',
height:'18px',
background: linb.UI.$bg('bar_vertical.gif','repeat-x left -380px', true)
},
'BAR-GROUP-mouseover':{
$order:3,
'background-position': 'left -410px'
},
'BAR-GROUP-checked':{
$order:4,
'background-position': 'left -440px'
},
SUB:{
overflow:'hidden',
'*zoom':1,
height:0,
'font-size':'1px',
//1px for ie8
'line-height':'1px',
position:'relative',
'margin-left':'12px'
},
MARK2:{
'vertical-align':'middle',
cursor:'pointer',
width:'16px',
height:'16px',
margin:'0 4px 0 0'
},
'MARK2-checked':{
$order:2,
background: linb.UI.$bg('icons.gif', 'no-repeat -84px -244px', true)
},
ITEMCAPTION:{
'vertical-align':'middle',
padding:'2px'
}
},
Behaviors:{
HoverEffected:{TOGGLE:'TOGGLE', BAR:'BAR'},
ClickEffected:{TOGGLE:'TOGGLE', BAR:'BAR'},
DragableKeys:["BAR"],
DropableKeys:["BAR","TOGGLE","BOX"],
onSize:function(profile,e){
var o = profile.root,w=null,h=null;
if(e.height)h=o.height();
if(e.width)w=o.width();
linb.UI.$tryResize(profile, w, h);
},
TOGGLE:{
onClick:function(profile, e, src){
var properties = profile.properties,
item = profile.getItemByDom(src);
if(properties.disabled || item.disabled)return false;
if(!('sub' in item))return false;
profile.box._setSub(profile, item, !item._checked);
// not to fire BAR's onclick event;
return false;
}
},
BAR:{
onClick:function(profile, e, src){
var properties = profile.properties,
item = profile.getItemByDom(src),
itemId =profile.getSubId(src.id),
box = profile.boxing(),
ks=linb.Event.getKey(e),
rt,rt2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -