📄 treebar.js
字号:
switch(properties.selMode){
case 'none':
rt=box.onItemSelected(profile, item, src);
break;
case 'multi':
var value = box.getUIValue(),
arr = value?value.split(';'):[];
if(arr.length&&(ks[1]||ks[2])){
//for select
rt2=false;
if(ks[2]){
if(profile.$firstV._pid!=item._pid)return false;
var items=properties.items;
if(item._pid){
var pitem=profile.getItemByItemId(item._pid);
if(pitem)items=pitem.sub;
}
var i1=_.arr.subIndexOf(items,'id',profile.$firstV.id),
i2=_.arr.subIndexOf(items,'id',item.id),
i;
arr.length=0;
for(i=Math.min(i1,i2);i<=Math.max(i1,i2);i++)
arr.push(items[i].id);
}else{
if(_.arr.indexOf(arr,item.id)!=-1)
_.arr.removeValue(arr,item.id);
else
arr.push(item.id);
}
arr.sort();
value = arr.join(';');
//update string value only for _setCtrlValue
if(box.getUIValue() == value)
rt=false;
else{
box.setUIValue(value);
if(box.getUIValue() == value)
rt=box.onItemSelected(profile, item, src)||rt2;
}
break;
}
case 'single':
if(box.getUIValue() == item.id)
rt=false;
else{
profile.$firstV=item;
box.setUIValue(item.id);
if(box.getUIValue() == item.id)
rt=box.onItemSelected(profile, item, src);
}
break;
}
profile.getSubNode('BAR', itemId).focus();
return rt;
},
onKeydown:function(profile, e, src){
var keys=linb.Event.getKey(e), key = keys[0], shift=keys[2],
cur = linb(src),
first = profile.root.nextFocus(true, true, false),
last = profile.root.nextFocus(false, true, false);
switch(linb.Event.getKey(e)[0]){
case 'tab':
if(shift){
if(src!=first.get(0)){
first.focus();
return false;
}
}else{
if(src!=last.get(0)){
last.focus();
return false;
}
}
break;
case 'up':
var next = cur.nextFocus(false, true, false);
if(cur.get(0)==first.get(0))
last.focus();
else
cur.nextFocus(false);
return false;
break;
case 'down':
var next = cur.nextFocus(true, false, false);
if(cur.get(0)==last.get(0))
first.focus();
else
cur.nextFocus();
return false;
break;
case 'right':
case 'left':
profile.getSubNode('TOGGLE',profile.getSubId(src.id)).onClick();
return false;
}
}
},
BOX:{
onScroll:function(profile, e, src){
//for ie 'href focus' will scroll view
if(linb([src]).scrollLeft()!==0)
linb([src]).scrollLeft(0);
}
}
},
EventHandlers:{
onGetContent:function(profile, item, callback, threadid){},
onItemSelected:function(profile, item, src){}
},
DataModel:{
listKey:null,
tabindex:{
action:function(value){
if(this.domNode)
this.getSubNode('BAR', true).attr('tabIndex',value);
}
},
iniFold:true,
animCollapse:false,
dock:'fill',
group:{
ini:false,
action:function(v){
var self = this,
items = self.properties.items,
results = self.queryItems(items, function(o){return o.sub && o.group===undefined }),
nodes=linb();
_.arr.each(results,function(o){
nodes.merge( self.getSubNodeByItemId('BAR', o.id) );
});
var cls1=self.getClass('BAR'), cls2 = self.getClass('BAR', '-group');
if(v)
nodes.replaceClass(new RegExp('(\\b)' + cls1 + '([^b]*\\b)','g'), '$1'+cls2+'$2');
else
nodes.replaceClass(new RegExp('(\\b)' + cls2 + '([^b]*\\b)','g'), '$1'+cls1+'$2');
}
},
selMode:{
ini:'single',
listbox:['single','none','multi'],
action:function(v,ov){
var n=this.getSubNode('MARK2',true);
if(ov=='none')
n.setInlineBlock();
if(v=='none')
n.css('display','none');
}
},
singleOpen:false,
dynDestory:false,
position:'absolute'
},
RenderTrigger:function(){
var self=this, pro=self.properties;
if(!pro.iniFold)
self.boxing()._toggleNodes(pro.items, true);
},
_onStartDrag:function(profile, e, src, pos){
var pos=linb.Event.getPos(e);
linb([src]).startDrag(e, {
dragType:'icon',
shadowFrom:src,
targetLeft:pos.left+12,
targetTop:pos.top+12,
dragCursor:'pointer',
dragDefer:1,
dragKey: profile.box.getDragKey(profile, src),
dragData: profile.box.getDragData(profile, src)
});
return false;
},
_onDropTest:function(profile, e, src, key, data, item){
var fid=data&&data.domId, tid=src.id;
if(fid){
if(fid==tid)return false;
if(_.get(src,['parentNode','previousSibling','firstChild','id'])==fid)return false;
}
},
_onDrop:function(profile, e, src, key, data, item){
linb.DragDrop.setDragIcon('none');
var k=profile.getKey(src.id),
po=data.profile,
ps=data.domId,
oitem,
ks=profile.keys,
t=linb.absObj.$specialChars,
b=profile.boxing();
//remove
oitem=_.clone(po.getItemByDom(ps),function(o,i){return !t[(i+'').charAt(0)]});
po.boxing().removeItems([oitem.id]);
//add
if(k==ks.BOX)
b.insertItems([oitem], null, null, false);
else if(k==ks.BAR)
b.insertItems([oitem], item._pid, item.id, true);
else if(k==ks.TOGGLE)
b.insertItems([oitem], item.id, null, false);
return false;
},
_ensureValue:function(profile,value){
if(profile.properties.selMode=='multi'){
var arr = (value||"").split(';');
arr.sort();
return arr.join(';');
}else
return value;
},
_prepareItem:function(profile, item, oitem, pid){
var p=profile.properties;
if(pid)oitem._pid=pid;
// set 'visible' will show when parent call .height()
item.mark = item.sub?'':'display:none';
item.disabled = item.disabled?profile.getClass('KEY', '-disabled'):'';
item.mark2Display = (p.selMode=='none')?'display:none':'';
item._tabindex = p.tabindex;
item.href = item.href || linb.$href;
//change css class
if(item.sub && (item.group!==undefined?item.group:p.group)){
item.cls_group = profile.getClass('BAR', '-group');
item.mark2Display = 'display:none';
}
},
_setSub:function(profile, item, flag, recursive){
var id=profile.domId,
itemId = profile.getSubIdByItemId(item.id),
properties = profile.properties,
barNode = profile.getSubNode('BAR', itemId),
markNode = profile.getSubNode('TOGGLE', itemId),
subNs = profile.getSubNode('SUB', itemId);
;
if(linb.Thread.isAlive(profile.key+profile.id)) return;
//close
if(item._checked){
if(!flag){
var h=subNs.height(),fun=function(){
subNs.css('display','none').height('auto');
};
if(properties.animCollapse)
subNs.animate({'height':[h,0]},function(){subNs.height(h)},function(){fun()}, 100, 5, 'inexp', profile.key+profile.id).start();
else
fun();
markNode.tagClass('-checked', false);
item._checked = false;
if(item.group || properties.group)
barNode.tagClass('-checked', false);
if(properties.dynDestory){
var s=item.sub, arr=[];
for(var i=0,l=s.length;i<l;i++)
arr.push(s[i].id);
profile.boxing().removeItems(arr);
item.sub=true;
delete item._created;
}
}
if(recursive && item.sub && !properties.dynDestory){
_.arr.each(item.sub,function(o){
if(o.sub && o.sub.length)
profile.box._setSub(profile, o, false, true);
});
}
}else{
//open
if(flag){
var openSub = function(profile, item, id, markNode, subNs, barNode, sub, recursive){
var b=profile.boxing(),
p=profile.properties;
//created
if(!item._created){
delete item.sub;
//before insertRows
item._created=true;
subNs.css('display','none');
if(typeof sub=='string')
subNs.html(item.sub=sub,false);
else if(sub.constructor==Array)
b.insertItems(sub, item.id);
else if(sub['linb.Template']||sub['linb.UI'])
subNs.append(item.sub=sub.render(true));
//set checked items
b._setCtrlValue(b.getUIValue(), true);
}
if(p.singleOpen)
b._toggleNodes(item._pid?profile.getItemByItemId(item._pid).sub:p.items, false)
if(!recursive){
var h = subNs.height(true);
if(p.animCollapse)
subNs.animate({'height':[0,h]},function(){subNs.height('0').css('display','block')},function(){subNs.height('auto')}, 100, 5, 'outexp', profile.key+profile.id).start();
else
subNs.css('display','block').height('auto');
}else
subNs.css('display','block');
markNode.tagClass('-checked');
if(item.group || properties.group)
barNode.tagClass('-checked');
item._checked = true;
},
sub=item.sub,
callback=function(sub){
openSub(profile, item, id, markNode, subNs, barNode, sub, recursive)
},
t;
if((t=typeof sub)=='string'||t=='object')
callback(sub);
else if(profile.onGetContent){
linb.Thread(null,[
function(threadId){
var r = profile.boxing().onGetContent(profile, item, callback, threadId);
if(r) callback(r);
}
],null,null,
//set busy status to UI
function(threadId){markNode.tagClass('-busy')},
//set free status to UI
function(){markNode.tagClass('-busy',false)}
).start();
}
}
if(recursive && item.sub){
_.arr.each(item.sub,function(o){
if(o.sub && o.sub.length && !o._checked)
profile.box._setSub(profile, o, true, true);
});
}
}
},
_onresize:function(profile,width,height){
profile.getSubNode('BORDER').cssSize({ width :width?width:null, height :height?height:null});
profile.getSubNode('BOX').cssSize({ width :width?width:null, height : height?height:null});
}
}
});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -