root / trunk / web / dojo / dojox / layout / ScrollPane.js @ 13
History | View | Annotate | Download (2.89 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
4 | see: http://dojotoolkit.org/license for details
|
||
5 | */
|
||
6 | |||
7 | |||
8 | if(!dojo._hasResource["dojox.layout.ScrollPane"]){ |
||
9 | dojo._hasResource["dojox.layout.ScrollPane"]=true; |
||
10 | dojo.provide("dojox.layout.ScrollPane");
|
||
11 | dojo.experimental("dojox.layout.ScrollPane");
|
||
12 | dojo.require("dijit.layout.ContentPane");
|
||
13 | dojo.require("dijit._Templated");
|
||
14 | dojo.declare("dojox.layout.ScrollPane",[dijit.layout.ContentPane,dijit._Templated],{_line:null,_lo:null,_offset:15,orientation:"vertical",autoHide:true,templateString:dojo.cache("dojox.layout","resources/ScrollPane.html","<div class=\"dojoxScrollWindow\" dojoAttachEvent=\"onmouseenter: _enter, onmouseleave: _leave\">\n <div class=\"dojoxScrollWrapper\" style=\"${style}\" dojoAttachPoint=\"wrapper\" dojoAttachEvent=\"onmousemove: _calc\">\n\t<div class=\"dojoxScrollPane\" dojoAttachPoint=\"containerNode\"></div>\n </div>\n <div dojoAttachPoint=\"helper\" class=\"dojoxScrollHelper\"><span class=\"helperInner\">|</span></div>\n</div>\n"),resize:function(_1){ |
||
15 | if(_1){
|
||
16 | if(_1.h){
|
||
17 | dojo.style(this.domNode,"height",_1.h+"px"); |
||
18 | } |
||
19 | if(_1.w){
|
||
20 | dojo.style(this.domNode,"width",_1.w+"px"); |
||
21 | } |
||
22 | } |
||
23 | var _2=this._dir,_3=this._vertical,_4=this.containerNode[(_3?"scrollHeight":"scrollWidth")]; |
||
24 | dojo.style(this.wrapper,this._dir,this.domNode.style[this._dir]); |
||
25 | this._lo=dojo.coords(this.wrapper,true); |
||
26 | this._size=Math.max(0,_4-this._lo[(_3?"h":"w")]); |
||
27 | if(!this._size){ |
||
28 | this.helper.style.display="none"; |
||
29 | this.wrapper[this._scroll]=0; |
||
30 | return;
|
||
31 | }else{
|
||
32 | this.helper.style.display=""; |
||
33 | } |
||
34 | this._line=new dojo._Line(0-this._offset,this._size+(this._offset*2)); |
||
35 | var u=this._lo[(_3?"h":"w")],r=Math.min(1,u/_4),s=u*r,c=Math.floor(u-(u*r)); |
||
36 | this._helpLine=new dojo._Line(0,c); |
||
37 | dojo.style(this.helper,_2,Math.floor(s)+"px"); |
||
38 | },postCreate:function(){ |
||
39 | this.inherited(arguments); |
||
40 | if(this.autoHide){ |
||
41 | this._showAnim=dojo._fade({node:this.helper,end:0.5,duration:350}); |
||
42 | this._hideAnim=dojo.fadeOut({node:this.helper,duration:750}); |
||
43 | } |
||
44 | this._vertical=(this.orientation=="vertical"); |
||
45 | if(!this._vertical){ |
||
46 | dojo.addClass(this.containerNode,"dijitInline"); |
||
47 | this._dir="width"; |
||
48 | this._edge="left"; |
||
49 | this._scroll="scrollLeft"; |
||
50 | }else{
|
||
51 | this._dir="height"; |
||
52 | this._edge="top"; |
||
53 | this._scroll="scrollTop"; |
||
54 | } |
||
55 | if(this._hideAnim){ |
||
56 | this._hideAnim.play();
|
||
57 | } |
||
58 | dojo.style(this.wrapper,"overflow","hidden"); |
||
59 | },_set:function(n){ |
||
60 | if(!this._size){ |
||
61 | return;
|
||
62 | } |
||
63 | this.wrapper[this._scroll]=Math.floor(this._line.getValue(n)); |
||
64 | dojo.style(this.helper,this._edge,Math.floor(this._helpLine.getValue(n))+"px"); |
||
65 | },_calc:function(e){ |
||
66 | if(!this._lo){ |
||
67 | this.resize();
|
||
68 | } |
||
69 | this._set(this._vertical?((e.pageY-this._lo.y)/this._lo.h):((e.pageX-this._lo.x)/this._lo.w)); |
||
70 | },_enter:function(e){ |
||
71 | if(this._hideAnim){ |
||
72 | if(this._hideAnim.status()=="playing"){ |
||
73 | this._hideAnim.stop();
|
||
74 | } |
||
75 | this._showAnim.play();
|
||
76 | } |
||
77 | },_leave:function(e){ |
||
78 | if(this._hideAnim){ |
||
79 | this._hideAnim.play();
|
||
80 | } |
||
81 | }}); |
||
82 | } |