📄 tabs.js
字号:
CMDS:{
'vertical-align':'middle',
'margin-left':'4px'
}
},
Behaviors:{
DropableKeys:['PANEL','KEY', 'ITEM'],
DragableKeys:['ITEM'],
HoverEffected:{ITEM:'ITEM',OPT:'OPT',CLOSE:'CLOSE',LAND:'LAND'},
ClickEffected:{ITEM:'ITEM',OPT:'OPT',CLOSE:'CLOSE',LAND:'LAND'},
onSize:function(profile,e){
var o = profile.domNode.style,w=null,h=null;
if(e.height)h = parseInt(o.height)||null;
if(e.width)w = parseInt(o.width)||null;
linb.UI.$tryResize(profile, w, h);
},
OPT:{
onMousedown:function(){
return false;
},
onClick:function(profile, e, src){
profile.boxing().onShowOptions(profile, profile.getItemByDom(src), e, src);
return false;
}
},
CAPTION:{
onMousedown:function(profile, e, src){
if(linb.Event.getBtn(e)!='left')return;
var properties = profile.properties,
item = profile.getItemByDom(src),
box = profile.boxing();
if(properties.disabled)return false;
if(box.getUIValue() == item.id){
if(profile.onCaptionActive)
profile.boxing().onCaptionActive(profile, profile.getItemByDom(src), src);
}
}
},
ITEM:{
onClick:function(profile, e, src){
return false;
},
onMousedown:function(profile, e, src){
if(linb.Event.getBtn(e)!='left')return false;
if(profile.getKey(linb.Event.getSrc(e).parentNode.id)==profile.keys.CMDS)return false;
var properties = profile.properties,
itemId = profile.getSubId(src.id),
item = profile.getItemByDom(src),
box = profile.boxing();
if(properties.disabled)return false;
if(box.getUIValue() == item.id)return;
//for some input onblur event
profile.getSubNode('HANDLE', itemId).focus();
box.setUIValue(item.id);
//if success
if(box.getUIValue() == item.id){
box.onItemSelected(profile, item, src);
return false;
}
}
},
HANDLE:{
onClick:function(profile, e, src){
return !!linb.Event.getKey(e)[2];
},
onKeydown:function(profile, e, src){
var keys=linb.Event.getKey(e), key = keys[0], shift=keys[2];
if(key==' '||key=='enter'){
profile.getSubNode('ITEM',profile.getSubId(src.id)).onMousedown();
return false;
}
var cur = linb([src]),
target = profile.getSubNode('ITEMS'),
first = target.nextFocus(true, true, false),
last = target.nextFocus(false, true, false);
switch(key){
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 'left':
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 'right':
case 'down':
var next = cur.nextFocus(true, false, false);
if(cur.get(0)==last.get(0))
first.focus();
else
cur.nextFocus();
return false;
break;
}
}
},
CLOSE:{
onMousedown:function(){
return false;
},
onClick:function(profile, e, src){
var properties = profile.properties,
item = profile.getItemByDom(src),bak;
if(properties.disabled)return;
var instance = profile.boxing();
if(false===instance.beforePageClose(profile, item, src)) return;
bak=_.copy(item);
instance.removeItems(item.id);
instance.afterPageClose(profile, bak);
linb.UI.$tryResize(profile, profile.root.width(), profile.root.height());
//for design mode in firefox
return false;
}
},
LAND:{
onMousedown:function(){
return false;
},
onClick:function(profile, e, src){
var properties = profile.properties,
item = profile.getItemByDom(src),
id=item.id;
if(properties.disabled)return;
var panel = profile.boxing().getPanel(id),
pos = profile.root.offset(),
size=profile.root.cssSize(),
pro = _.copy(linb.UI.Dialog.$DataStruct);
_.merge(pro, item, 'with');
_.merge(pro,{
dragKey: item.dragkey || properties.dragKey ,
dock:'none',
tag:item.tag||item.id,
width:Math.max(size.width,200),
height:Math.max(size.height,100),
left:pos.left,
top:pos.top
},'all');
var dialog = new linb.UI.Dialog(pro);
linb('body').append(dialog);
var arr=[];
_.arr.each(profile.children,function(o){
if(o[1]==id)
arr.push(o[0]);
},null,true);
if(arr.length)
dialog.append(linb.UI.pack(arr,false));
profile.boxing().removeItems(id);
//for design mode in firefox
return false;
}
}
},
DataModel:{
dataBinder:null,
dataField:null,
dock:'fill',
hasPanel:true,
width:200,
height:200,
position:'absolute',
HAlign:{
ini:'left',
listbox:['left','center','right'],
action:function(value){
if(this.domNode)
this.getSubNode('ITEMS').css('textAlign',value);
}
},
tabindex:{
action:function(value){
if(this.domNode)
this.getSubNode('HANDLE',true).attr('tabIndex',value);
}
},
dynRender:true,
dropKeysPanel:'',
value:{
ini:''
},
//use ilist defualt items
items:{
set:function(value){
return this.each(function(o){
if(o.domNode){
var box = o.boxing(),
p,
temp = linb.Dom.getEmptyDiv(),
children = _.copy(o.children);
o.children.length=0;
_.arr.each(children,function(o){
//for flush dock
delete o[0].$dockParent;
//keep it in dom
temp.append(o[0].root);
});
//bak value
var bv = o.properties.value;
//clear all
box.clearItems();
//call gc to clear onresize setting
linb.Dom.__gc();
//inset items
box.insertItems(value);
//restore children
_.arr.each(children,function(v){
box.append.apply(box,v);
});
//clear
temp.empty();
//set value
box.setValue(bv,true);
//resize
var size = o.root.cssSize();
linb.UI.$tryResize(o, size.width, size.height);
}else
o.properties.items = value;
});
}
}
},
EventHandlers:{
beforePageClose:function(profile, item, src){},
afterPageClose:function(profile, item){},
onShowOptions:function(profile,item,e,src){},
onItemSelected:function(profile, item, src){},
onCaptionActive:function(profile, item, src){}
},
RenderTrigger:function(){
var self=this,v,i,ins;
// set default value
if(v=self.properties.value){
(ins=self.boxing()).setUIValue(v);
if(i=self.getItemByItemId(v))
ins.onItemSelected(self, i);
}
},
_getChildren:function(profile){
if(!profile.properties.dynRender)
return profile.children;
},
_prepareData:function(profile){
var data = arguments.callee.upper.call(this, profile);
data.panels = data.items;
data.HAlign = 'text-align:'+data.HAlign+';';
return data;
},
_prepareItem:function(profile, item){
var dpn = 'display:none';
item.closeDisplay = item.closeBtn?'':dpn;
item.landDisplay = item.landBtn?'':dpn;
item._opt = item.optBtn?'':dpn;
item.href = item.href || linb.$href;
},
getDropKeys:function(profile,node){
return profile.properties[profile.getKey(node.id)==profile.keys.PANEL?'dropKeys':'dropKeysPanel'];
},
_showTips:function(profile, node, pos){
var id=node.id,
p=profile.properties,
keys=profile.keys,
key=profile.getKey(id);
if(!id)return false;
if(profile.onShowTips)
return profile.boxing().onShowTips(profile, node, pos);
else
return arguments.callee.upper.apply(this,arguments);
},
//for tabs only
_onresize:function(profile,width,height,force,key){
var t=profile.properties,
item = profile.getItemByItemId(key);
if(!item)
key=t.$UIvalue;
item = profile.getItemByItemId(key);
var o = profile.boxing().getPanel(key),
l=profile.getSubNode('LIST'),
forceH=0,
listH;
;
if(!o || o.isEmpty())return;
//no height set
if(!parseInt(profile.domNode.style.height))
height=null;
var wc=null,hc=null;
if(force)item._w=item._h=null;
if(width && item._w!=width){
height=profile.domNode.offsetHeight || profile.getRoot().offsetHeight();
forceH=1;
}
if((height && item._h!=height) || forceH){
item._h=height;
listH = l.get(0).offsetHeight ||
//for opear 9.0 get height bug, get offsetheight in firefox is slow
l.offsetHeight();
height = height-listH+(linb.browser.ie6?2:1);
if(height>0)hc=height;
}
if(listH)o.top(listH);
//force to trigger onSze event, whatever width or height was changed.
if(hc)o.height(hc).onSize();
}
}
});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -