?? timeline.js
字號:
/*
*to do: background div
*to do: special div
*/
Class('linb.UI.TimeLine', ['linb.UI','linb.absList',"linb.absValue"], {
Dependency:['linb.Date'],
Instance:{
_setCtrlValue:function(value){
if(!value)return;
if(value.indexOf(':')==-1)return;
var profile=this.get(0),
p=profile.properties,
box=this.constructor,
a=value.split(':'),
from=new Date(parseInt(a[0])),
to=new Date(parseInt(a[1])),
pxStart=box._getX(profile,from),
pxEnd=box._getX(profile,to),
task;
if(p.items.length===0)
this.insertItems([{id:'$', caption:p.dftTaskName, from:from, to:to}],null,true);
else
box._resetItem(profile,{left:pxStart,width:pxEnd-pxStart},profile.getSubNodeByItemId('ITEM',p.items[0].id).get(0));
},
visibleTask:function(){
var profile=this.get(0),
p=profile.properties,
date=linb.Date,
items=p.items;
if(items.length && !p.multiTasks){
target=new Date(items[0].from);
if(target<p.dateStart || target>date.add(p.dateStart,'ms',p.width*p._rate)){
p.dateStart=target;
var k=p.$UIvalue;
this.refresh().setUIValue(k);
}
}
return this;
},
_afterInsertItems:function(profile){
profile.box._reArrage(profile);
},
_afterRemoveItems:function(profile){
profile.box._reArrage(profile);
},
_cache:function(){
var profile=this.get(0),
cls=this.constructor,
picker=cls._picker;
if(picker && picker.domNode)
profile.getSubNode('POOL').append(picker.root.css('display','none'));
},
getTimeRange:function(){
var profile=this.get(0), p=profile.properties;
return [p._smallLabelStart, p._smallLabelEnd];
},
iniContent:function(){
return this.each(function(profile){
var p=profile.properties;
profile.boxing()._getContent(p._smallLabelStart,p._smallLabelEnd,p._rate,'ini');
});
},
addTasks:function(arr){
return this.insertItems(arr,null,true);
},
removeTasks:function(ids){
this.removeItems(ids);
return this;
},
_getContent:function(from,to,rate,type){
return this.each(function(profile){
if(profile.onGetContent){
var p=profile.properties,
ins=profile.boxing(),
callback=function(arr){
profile.boxing().addTasks(arr);
};
linb.Thread(null,[
function(threadId){
var r = ins.onGetContent(profile, from, to, rate, type, callback, threadId);
if(r) callback(r);
}
],null,null,
function(threadId){ins.busy()},
function(){ins.free()}
).start();
}
});
}
},
Static:{
Templates:{
tagName:'div',
style:'{_style}',
BORDER:{
tagName:'div',
style:'height:{_bHeight}px;width:{_bWidth}px;',
FOCUS:{tagName:'button'},
POOL:{
tagName:'div',
style:'position:absolute;left:0;top:0;width:0;height:0;display:none;'
},
BAR:{
tagName:'div',
className:'uibar-bar',
style:'{_bardisplay};height:{_barHeight}px;',
BART:{
cellpadding:"0",
cellspacing:"0",
width:'100%',
height:'100%',
border:'0',
tagName:'table',
className:'uibar-t',
BARTR:{
tagName:'tr',
BARTDL:{
tagName:'td',
className:'uibar-tdl'
},
BARTDM:{
$order:1,
width:'100%',
tagName:'td',
className:'uibar-tdm'
},
BARTDR:{
$order:2,
tagName:'td',
className:'uibar-tdr'
}
}
},
BARCMDL:{
tagName:'div',
className:'uibar-cmdl',
DATE:{$order:0,style:'{dateDisplay}'},
PRE:{$order:2},
'ZOOMIN':{$order:3,style:'{zoomDisplay}'},
'ZOOMOUT':{$order:4,style:'{zoomDisplay}'},
NEXT:{$order:5}
},
BARCMDR:{
tagName: 'div',
className:'uibar-cmdr',
onselectstart:'return false',
unselectable:'on',
OPT:{
className:'uicmd-opt',
style:'{optDisplay}',
$order:0
},
CLOSE:{
$order:4,
className:'uicmd-close ',
style:'{closeDisplay}'
}
}
},
BAND:{
$order:2,
tagName:'div',
style:'left:{_band_left}px;width:{_band_width}px;',
BIGLABEL:{
tagName:'div',
style:'height:{_bigLabelHeight}px;z-index:3;{_showBigLabel}',
text:"{_bigMarks}"
},
SMALLLABEL:{
$order:1,
tagName:'div',
style:'height:{_smallLabelHeight}px;z-index:4;',
text:"{_smallMarks}"
}
},
VIEW:{
$order:3,
tagName:'div',
style:'height:{_viewHeight}px;',
ITEMS:{
tagName:'div',
style:'left:{_band_left}px;width:{_band_width}px;',
text:'{items}',
ACTIVE:{
$order:3,
tagName:'div'
}
},
SCROLL:{
tagName:'div',
SCROLLI:{
tagName:'div'
}
}
},
TIPS:{
$order:4,
style:'z-index:2;{_tipsdisplay};height:{_tipsHeight}px',
tagName:'div'
}
},
$dynamic : {
_bigMarks:{
LABELT:{
id:null,
className:null,
tagName:'div',
onselectstart:'return false',
unselectable:'on',
style:'width:{width}px;left:{left}px;',
text:'{text}'
}
},
_smallMarks:{
LABELB:{
id:null,
className:null,
tagName:'div',
onselectstart:'return false',
unselectable:'on',
style:'width:{width}px;left:{left}px;',
text:'{text}'
}
},
items:{
ITEM:{
tagName:'div',
className:'{itemClass}',
style:'left:{_left}px;width:{_width}px;{_top};{_height};{itemStyle}',
MIN:{
$order:0,
tagName:'div',
style:'{_minDisplay}'
},
NORMAL:{
$order:1,
tagName:'div',
style:'{_normalDisplay};{_height};{_border}{_background}',
LEFT:{
$order:1,
tagName:'div'
},
HEAD:{
$order:2,
tagName:'div'
},
CON:{
$order:3,
tagName:'div',
text:'{caption}'
},
RIGHT:{
$order:4,
tagName:'div'
}
}
}
}
}
},
Behaviors:{
DropableKeys:['ITEMS'],
HoverEffected:{PRE:'PRE',NEXT:'NEXT',ZOOMIN:'ZOOMIN',ZOOMOUT:'ZOOMOUT',DATE:'DATE',OPT:'OPT',CLOSE:'CLOSE',MIN:'MIN',NORMAL:'NORMAL'},
ClickEffected:{PRE:'PRE',NEXT:'NEXT',ZOOMIN:'ZOOMIN',ZOOMOUT:'ZOOMOUT',DATE:'DATE',OPT:'OPT',CLOSE:'CLOSE',MIN:'MIN'},
onSize:function(profile,e){
var o = profile.domNode.style,f=parseInt, n=null, w=n, h=n;
if(e.height)h=f(o.height)||n;
if(e.width)w=f(o.width)||n;
if(h)linb.UI.$tryResize(profile, w, h);
},
CLOSE:{
onClick:function(profile, e, src){
if(profile.properties.disabled)return;
var instance = profile.boxing();
if(false===instance.beforeClose(profile, src)) return;
instance.destroy();
//for design mode in firefox
return false;
}
},
OPT:{
onClick:function(profile, e, src){
if(profile.properties.disabled)return;
profile.boxing().onShowOptions(profile, e, src);
}
},
onClick:function(profile, e){
profile.box._focus(profile);
},
BAND:{
onMousedown:function(profile, e, src){
if(profile.pauseA||profile.pause)return;
var t=profile.properties,
r=-t._band_left,
date=linb.Date,
rate=t._rate,
ep=linb.Event.getPos(e),
l=t._band_width-r-t.width;
;
if(t.minDate && t._smallLabelStart<t.minDate)
r-=date.diff(t._smallLabelStart,t.minDate,'ms')/rate;
if(t.maxDate && t._smallLabelEnd>t.maxDate)
l-=date.diff(t.maxDate,t._smallLabelEnd,'ms')/rate;
if(r<0)r=0;
if(l<0)l=0;
linb([src]).startDrag(e, {
targetReposition:false,
dragType:'blank',
horizontalOnly:true,
targetLeft:ep.left,
targetTop:ep.top,
maxLeftOffset:l,
maxRightOffset:r
});
},
onDragstop:function(profile, e, src){
profile.box._rePosition(profile);
profile.box._focus(profile);
},
onDrag:function(profile, e, src){
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -