Spade
Mini Shell
| Directory:~$ /home/lmsyaran/www/modules/mod_vertical_menu/params/offlajnlist/offlajnlist/ |
| [Home] [System Details] [Kill Me] |
dojo.declare("OfflajnScroller", null, {
constructor: function(args) {
this.scrollspeed = 10;
this.curr = 0;
dojo.mixin(this,args);
this.initScrollbar();
},
initScrollbar: function() {
(!dojo.isMozilla) ? dojo.connect(this.selectbox,
'onmousewheel', this, 'scrollWheel') :
dojo.connect(this.selectbox, 'DOMMouseScroll', this,
'scrollWheel');
var right = dojo.create('div', {'class':
'gk_hack offlajnscrollerright'}, this.selectbox);
this.sc = dojo.create('div', {'class':
'gk_hack offlajnscrollerbg'}, right);
this.scrollbg = dojo.create('div', {'class':
'gk_hack offlajnscrollerscrollbg'}, this.sc);
this.scrollbtn = dojo.create('div', {'class':
'gk_hack offlajnscrollerscrollbtn'} ,this.sc );
if(this.extraClass) {
dojo.addClass(right, this.extraClass);
dojo.addClass(this.sc, this.extraClass);
dojo.addClass(this.scrollbg, this.extraClass);
dojo.addClass(this.scrollbtn, this.extraClass);
}
if(this.extraClass == 'multi-select') {
this.scrollup = dojo.create('div', {'class':
'gk_hack offlajnscrollerarrowup'}, this.sc, 'first');
this.scrolldown = dojo.create('div', {'class':
'gk_hack offlajnscrollerarrowdown' }, this.sc, 'last');
this.scrupc = dojo.connect(this.scrollup, 'onmousedown',
this, 'upScroll');
this.scrdownc = dojo.connect(this.scrolldown,
'onmousedown', this, 'downScroll');
}
dojo.connect(this.scrollbtn, 'onmousedown', this,
'onscrolldown');
dojo.connect(this.scrollbg, 'onclick', this,
'scrollTo');
this.scrbg = dojo.position(this.scrollbg, true);
this.scrollbtnprop = dojo.position(this.scrollbtn, true);
this.scrollReInit();
},
scrollReInit: function(){
dojo.style(this.scrollbtn, 'display', 'block');
this.maxHeight = parseInt(dojo.position(this.content).h);
this.windowHeight = parseInt(dojo.style(this.selectbox,
'height'));
this.scrollRatio = this.maxHeight/this.windowHeight;
this.maxTop = -1 * (this.maxHeight-this.windowHeight);
if(this.maxTop > 0) this.maxTop = 0;
var scrollArrowHeight = 0;
this.scrollHeight = 0;
var marginVertical =
dojo.marginBox(this.scrollbg).h-dojo.position(this.scrollbg).h;
if(this.extraClass == 'multi-select') {
scrollArrowHeight = dojo.marginBox(this.scrollup).h;
this.scrollHeight =
(this.windowHeight+(-2*scrollArrowHeight-marginVertical-2));
this.scrollBtnmaxTop =
(this.scrollHeight-this.scrollHeight/this.scrollRatio)-2;
} else {
this.scrollHeight = (this.windowHeight-10);
this.scrollBtnmaxTop =
(this.scrollHeight-this.scrollHeight/this.scrollRatio);
}
dojo.style(this.scrollbg, 'height',
this.scrollHeight+'px');
var scrollBtn = (this.scrollHeight/this.scrollRatio-2);
if(scrollBtn<10){
scrollBtn = 10;
this.scrollBtnmaxTop = (this.scrollHeight-scrollBtn-2);
}
this.scrollBtnH = scrollBtn;
dojo.style(this.scrollbtn, 'height',
scrollBtn+'px');
if(this.scrollBtnmaxTop < 0) this.scrollBtnmaxTop = 0;
if(this.windowHeight > this.maxHeight) this.hideScrollBtn();
},
hideScrollBtn: function() {
dojo.style(this.scrollbtn, 'display', 'none');
},
goToBottom: function(){
this.scrolling(-1000,1000);
},
onscrolldown: function(e) {
this.scrdown = 1;
this.currentpos = e.clientY;
this.scrbtnpos = dojo.style(this.scrollbtn, 'top');
this.mousemove = dojo.connect(document, 'onmousemove', this,
'onscrollmove');
this.mouseup = dojo.connect(document, 'onmouseup', this,
'mouseUp');
},
onscrollmove: function(e) {
var diff = this.currentpos-e.clientY;
if(diff == 0) return;
var lastt = (dojo.style(this.scrollbtn, 'top'));
var pos = dojo.style(this.content, 'top');
this.scrolling(diff,
(((lastt-diff)/this.scrollBtnmaxTop)*this.maxTop-pos)/diff);
this.currentpos = e.clientY;
},
scrollTo: function(e) {
var pos = e.clientY;
var sc = dojo.position(this.scrollbg);
var currpos = pos - sc.y;
if(currpos < this.maxTop) currpos = maxTop;
if(currpos > this.scrollBtnmaxTop) currpos = this.scrollBtnmaxTop;
dojo.style(this.scrollbtn, 'top', currpos + 'px');
var scroll = -1*currpos * this.scrollRatio;
dojo.style(this.content, 'top', scroll + 'px');
},
setPosition: function(p) {
var pos = -1*p;
if(pos < this.maxTop) pos = this.maxTop;
this.setScrollBtn(pos);
dojo.style(this.content, 'top', pos + 'px');
},
onscrollup: function(e) {
e.stopPropagation();
this.scrdown = 0;
},
upScroll: function(e) {
this.mouseup = dojo.connect(document, 'onmouseup', this,
'mouseUp');
e.stopPropagation();
this.btnScroll(1);
},
downScroll: function(e) {
this.mouseup = dojo.connect(document, 'onmouseup', this,
'mouseUp');
e.stopPropagation();
this.btnScroll(-1);
},
btnScroll: function(direction){
this.dscr = 1;
var fn = dojo.hitch(this, 'scrolling', direction,
this.scrollspeed/4);
fn();
this.inter = window.setInterval(fn, 50);
},
scrolling: function(p, ratio) {
if(ratio == undefined) ratio = this.scrollspeed;
var pos = dojo.style(this.content, 'top');
var scr = pos + (p * ratio);
if(scr < this.maxTop) scr = this.maxTop;
if(scr > 0) scr = 0;
dojo.style(this.content, 'top', scr + 'px');
this.setScrollBtn(scr);
this.curr = scr;
this.onScroll();
},
onScroll: function(){
},
setScrollBtn: function(val) {
var top = (this.scrollBtnmaxTop*(val/this.maxTop));
dojo.style(this.scrollbtn, 'top', top+'px');
},
mouseUp: function(e) {
if(this.mousemove)
dojo.disconnect(this.mousemove);
if(this.mouseup)
dojo.disconnect(this.mouseup);
e.stopPropagation();
this.inter = window.clearInterval(this.inter);
if( this.dscr == 1) {
this.dscr = 0;
}
},
scrollWheel: function(e) {
var pos = 0;
pos = (e.detail != "") ? e.detail : e.wheelDelta;
if(dojo.isMozilla || dojo.isOpera) {
if (pos < 0) {
this.scrolling(1);
} else {
this.scrolling(-1);
}
} else {
if (pos < 0) {
this.scrolling(-1);
} else {
this.scrolling(1);
}
}
dojo.stopEvent(e);
}
});