📄 popmenu.js
字号:
Class("linb.UI.PopMenu",["linb.UI.Widget","linb.absList"],{
Instance:{
_adjustSize:function(){
this.each(function(profile){
var
root = profile.root,
items = profile.getSubNode('ITEMS'),
border = profile.getSubNode('BORDER'),
size1 = root.cssSize(),
size2 = border.cssSize(),
pro=profile.properties,
h = Math.min(pro._maxHeight, items.height() + size1.height - size2.height+1),
w = Math.min(pro._maxWidth, items.width() + size1.width - size2.width+1)
;
pro.width=w;
pro.height=h;
//set size first, for adding shadow later
root.cssSize({width:w,height:h});
//avoid blazing(shadow elements) when resize the border
linb.UI.$tryResize(profile,w,h,true);
if(pro.shadow){
profile.$noS=true;
var ins=profile.boxing();
if(ins._shadow)
ins._shadow(true);
}
});
return this._setScroll();
},
_setScroll:function(){
return this.each(function(profile){
var
o=profile.getSubNode('ITEMS'),
t=o.offsetTop(),
h=o.offsetHeight(),
b = profile.getSubNode('BORDER'),
hh=b.offsetHeight();
profile.getSubNode('TOP').css('display',t===0?'none':'block');
profile.getSubNode('BOTTOM').css('display',(hh>h+t)?'none':'block');
})
},
_scrollToBottom:function(){
return this.each(function(profile){
var o = profile.getSubNode('ITEMS'),
border = profile.getSubNode('BORDER'),
y = o.offsetTop(),
offset,
h = o.offsetHeight(),
b=false,
bh = border.height();
if(bh<h+y){
if(!profile.$scrollStep)profile.$scrollStep=1;
if(profile.$scrollStep<30)
profile.$scrollStep = profile.$scrollStep*1.1;
y -= profile.$scrollStep;
if(bh>h+y){
y=bh-h;
b=true;
}
o.top(y);
if(b){
profile.getSubNode('BOTTOM').css('display','none');
profile.$scrollTobottom=false;
profile.$scrollStep=null;
}else{
profile.getSubNode('TOP').css('display','block');
if(profile.$scrollTobottom)
_.asyRun(arguments.callee, 0, [profile], this);
}
}
});
},
_scrollToTop:function(){
return this.each(function(profile){
var o = profile.getSubNode('ITEMS'),
y = o.offsetTop(),
b=false;
if(y<0){
if(!profile.$scrollStep)profile.$scrollStep=1;
if(profile.$scrollStep<10)
profile.$scrollStep = profile.$scrollStep*1.03;
y += profile.$scrollStep;
if(y>=-1){
y=0;
b=true;
}
o.top(y);
if(b){
profile.getSubNode('TOP').css('display','none');
profile.$scrollToTop=false;
profile.$scrollStep=null;
}else{
profile.getSubNode('BOTTOM').css('display','block');
if(profile.$scrollToTop)
_.asyRun(arguments.callee, 0, [profile], this);
}
}
});
},
pop:function(obj, type, parent){
var profile=this.get(0);
//ensure rendered
if(!profile.rendered){
var o=profile.boxing().render(true);
//LayoutTrigger
linb.Dom.getEmptyDiv().append(o);
}
var root = profile.root;
//clear highLight first
if(profile.$highLight)
linb([profile.$highLight]).tagClass('-mouseover',false);
profile._conainer=parent;
root.popToTop(obj, type, parent);
var f=function(){
var p=arguments.callee.profile;
p.boxing().hide();
p.$popGrp.length=0;
};
f.profile=profile;
if(!profile.$popGrp || !profile.$popGrp.length){
profile.$popGrp = [root.get(0)];
//group blur trigger
root.setBlurTrigger(profile.$id, null);
root.setBlurTrigger(profile.$id, f, profile.$popGrp);
}
return this;
},
hide:function(triggerEvent){
var t,
profile=this.get(0),
root=profile.root,
sms='$subPopMenuShowed',
cm='$childPopMenu';
if(false!==triggerEvent)
if(false===profile.boxing().beforeHide(profile))
return this;
if(!root || root.css('display')=='none')return;
//remove trigger
root.setBlurTrigger(profile.$id,null);
if(profile.$hideMenuPool)
profile.$hideMenuPool.append(root);
else
root.css('display','none');
//hide all parent pop
var p=profile[cm],q;
if(t=profile[sms])t.hide();
while(p){
p.boxing().hide();
p=(q=p)[cm];
q[cm] = q[sms] = null;
}
profile[cm]=profile[sms]=null;
if(t=profile.$parentPopMenu)t[sms]=null;
_.arr.removeValue(profile.$popGrp,root.get(0));
if(false!==triggerEvent)
profile.boxing().onHide(profile);
return this;
}
},
Initialize:function(){
//modify default template fro shell
var t = this.getTemplate();
_.merge(t.FRAME.BORDER,{
TOP:{},
BOTTOM:{},
BOX:{
tagName:'div',
ITEMS:{
tagName:'div',
text:"{items}"
}
},
POOL:{
tagName : 'div',
style:'display:none;'
}
},'all');
t.$dynamic = {
'items':function(profile,template,v,tag,result){
var t;
tag = tag+'.'+v.type;
//for linb.UI or linb.Template
if(t=v.object){
//[v] is for linb.Template
result[result.length]=t.build(v);
}else{
if(template[tag])
linb.UI.$doTemplate(profile,template,v,tag,result);
}
},
'items.split':{
ITEMSPLIT:{
tagName : 'a'
}
},
'items.button':{
ITEM:{
tagName : 'a',
href :linb.$href,
tabindex: 1,
className: '{itemClass} {disabled}',
style:'{itemStyle}',
ICON:{
style:'background:url({image}) transparent no-repeat {imagePos};',
className:'ui-icon',
$order:0
},
CAPTION:{
text : '{caption}',
$order:1
},
RULER:{
style:'{displayAdd}',
$order:2
},
ADD:{
tagName : 'div',
style:'{displayAdd}',
text : '{add}',
$order:2
},
SUB:{style:'{tagClass}'}
}
},
'items.checkbox':{
ITEM:{
tagName : 'a',
href :linb.$href,
tabindex: 1,
className: '{itemClass} {disabled}',
style:'{itemStyle}',
CHECKBOX:{
$order:0,
className:'ui-icon {checkboxCls}'
},
CAPTION:{
text : '{caption}',
$order:1
},
RULER:{
style:'{displayAdd}',
$order:2
},
ADD:{
tagName : 'div',
style:'{displayAdd}',
text : '{add}',
$order:2
}
}
}
};
this.setTemplate(t);
},
Static:{
$noDomRoot:true,
Appearances:{
KEY:{
'font-size':'12px',
visibility:'hidden'
},
BORDER:{
border:'1px solid',
'border-color':'#FFF #ACA899 #ACA899 #FFF'
},
BOX:{
'background-color':'#EEF7FF',
overflow:'hidden',
position:'absolute',
left:0,
top:0,
'font-size':'12px',
'z-index':'3'
},
ITEMS:{
position:'absolute',
top:0,
left:0,
overflow:'visible',
background: linb.UI.$bg('bg.gif', 'repeat-y left top')
},
ITEM:{
display:'block',
position:'relative',
overflow:'visible',
'white-space': 'nowrap',
color:'#000',
'font-family': '"Verdana", "Helvetica", "sans-serif"',
cursor:'pointer',
padding:'2px 20px 2px 2px'
},
ITEMSPLIT:{
display:'block',
position:'relative',
overflow:'visible',
'white-space': 'nowrap',
'font-size':'1px',
'line-height':'1px',
padding:'1px',
margin:'2px 2px 2px 26px',
background: linb.UI.$bg('split_horizontal.gif', 'repeat-x left top', true)
},
'ITEM-mouseover':{
$order:1,
'background-color':'#FFFA9F',
border:'solid 1px #94A3A8',
padding:'1px 19px 1px 1px'
},
'ITEM-checked':{
$order:2,
'background-color':'#FFFA9F',
border:'solid 1px #94A3A8',
padding:'1px 19px 1px 1px'
},
CHECKBOX:{
background: linb.UI.$bg('icons.gif', 'no-repeat -20px -70px', true),
margin:0
},
ICON:{
margin:0
},
'CHECKBOX-checked':{
$order:1,
background: linb.UI.$bg('icons.gif', 'no-repeat -0px -70px', true)
},
TOP:{
cursor:'pointer',
display:'none',
position:'absolute',
'margin-left':'-8px',
right:0,
height:'16px',
width:'16px',
'z-index':'10',
top:0,
background: linb.UI.$bg('icons.gif', 'no-repeat -48px -244px', true)
},
BOTTOM:{
cursor:'pointer',
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -