mirror of
https://git.tt-rss.org/git/tt-rss.git
synced 2025-12-19 23:31:30 +00:00
build custom layer of Dojo to speed up loading of tt-rss (refs #293)
This commit is contained in:
@@ -5,95 +5,112 @@
|
||||
*/
|
||||
|
||||
|
||||
if(!dojo._hasResource["dojo.dnd.autoscroll"]){
|
||||
dojo._hasResource["dojo.dnd.autoscroll"]=true;
|
||||
if(!dojo._hasResource["dojo.dnd.autoscroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||||
dojo._hasResource["dojo.dnd.autoscroll"] = true;
|
||||
dojo.provide("dojo.dnd.autoscroll");
|
||||
dojo.dnd.getViewport=function(){
|
||||
var d=dojo.doc,dd=d.documentElement,w=window,b=dojo.body();
|
||||
if(dojo.isMozilla){
|
||||
return {w:dd.clientWidth,h:w.innerHeight};
|
||||
}else{
|
||||
if(!dojo.isOpera&&w.innerWidth){
|
||||
return {w:w.innerWidth,h:w.innerHeight};
|
||||
}else{
|
||||
if(!dojo.isOpera&&dd&&dd.clientWidth){
|
||||
return {w:dd.clientWidth,h:dd.clientHeight};
|
||||
}else{
|
||||
if(b.clientWidth){
|
||||
return {w:b.clientWidth,h:b.clientHeight};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
dojo.dnd.getViewport = function(){
|
||||
// summary:
|
||||
// Returns a viewport size (visible part of the window)
|
||||
|
||||
// TODO: remove this when getViewport() moved to dojo core, see #7028
|
||||
|
||||
// FIXME: need more docs!!
|
||||
var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
|
||||
if(dojo.isMozilla){
|
||||
return {w: dd.clientWidth, h: w.innerHeight}; // Object
|
||||
}else if(!dojo.isOpera && w.innerWidth){
|
||||
return {w: w.innerWidth, h: w.innerHeight}; // Object
|
||||
}else if (!dojo.isOpera && dd && dd.clientWidth){
|
||||
return {w: dd.clientWidth, h: dd.clientHeight}; // Object
|
||||
}else if (b.clientWidth){
|
||||
return {w: b.clientWidth, h: b.clientHeight}; // Object
|
||||
}
|
||||
return null; // Object
|
||||
};
|
||||
dojo.dnd.V_TRIGGER_AUTOSCROLL=32;
|
||||
dojo.dnd.H_TRIGGER_AUTOSCROLL=32;
|
||||
dojo.dnd.V_AUTOSCROLL_VALUE=16;
|
||||
dojo.dnd.H_AUTOSCROLL_VALUE=16;
|
||||
dojo.dnd.autoScroll=function(e){
|
||||
var v=dojo.dnd.getViewport(),dx=0,dy=0;
|
||||
if(e.clientX<dojo.dnd.H_TRIGGER_AUTOSCROLL){
|
||||
dx=-dojo.dnd.H_AUTOSCROLL_VALUE;
|
||||
}else{
|
||||
if(e.clientX>v.w-dojo.dnd.H_TRIGGER_AUTOSCROLL){
|
||||
dx=dojo.dnd.H_AUTOSCROLL_VALUE;
|
||||
}
|
||||
}
|
||||
if(e.clientY<dojo.dnd.V_TRIGGER_AUTOSCROLL){
|
||||
dy=-dojo.dnd.V_AUTOSCROLL_VALUE;
|
||||
}else{
|
||||
if(e.clientY>v.h-dojo.dnd.V_TRIGGER_AUTOSCROLL){
|
||||
dy=dojo.dnd.V_AUTOSCROLL_VALUE;
|
||||
}
|
||||
}
|
||||
window.scrollBy(dx,dy);
|
||||
|
||||
dojo.dnd.V_TRIGGER_AUTOSCROLL = 32;
|
||||
dojo.dnd.H_TRIGGER_AUTOSCROLL = 32;
|
||||
|
||||
dojo.dnd.V_AUTOSCROLL_VALUE = 16;
|
||||
dojo.dnd.H_AUTOSCROLL_VALUE = 16;
|
||||
|
||||
dojo.dnd.autoScroll = function(e){
|
||||
// summary:
|
||||
// a handler for onmousemove event, which scrolls the window, if
|
||||
// necesary
|
||||
// e: Event
|
||||
// onmousemove event
|
||||
|
||||
// FIXME: needs more docs!
|
||||
var v = dojo.dnd.getViewport(), dx = 0, dy = 0;
|
||||
if(e.clientX < dojo.dnd.H_TRIGGER_AUTOSCROLL){
|
||||
dx = -dojo.dnd.H_AUTOSCROLL_VALUE;
|
||||
}else if(e.clientX > v.w - dojo.dnd.H_TRIGGER_AUTOSCROLL){
|
||||
dx = dojo.dnd.H_AUTOSCROLL_VALUE;
|
||||
}
|
||||
if(e.clientY < dojo.dnd.V_TRIGGER_AUTOSCROLL){
|
||||
dy = -dojo.dnd.V_AUTOSCROLL_VALUE;
|
||||
}else if(e.clientY > v.h - dojo.dnd.V_TRIGGER_AUTOSCROLL){
|
||||
dy = dojo.dnd.V_AUTOSCROLL_VALUE;
|
||||
}
|
||||
window.scrollBy(dx, dy);
|
||||
};
|
||||
dojo.dnd._validNodes={"div":1,"p":1,"td":1};
|
||||
dojo.dnd._validOverflow={"auto":1,"scroll":1};
|
||||
dojo.dnd.autoScrollNodes=function(e){
|
||||
for(var n=e.target;n;){
|
||||
if(n.nodeType==1&&(n.tagName.toLowerCase() in dojo.dnd._validNodes)){
|
||||
var s=dojo.getComputedStyle(n);
|
||||
if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){
|
||||
var b=dojo._getContentBox(n,s),t=dojo.position(n,true);
|
||||
var w=Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL,b.w/2),h=Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL,b.h/2),rx=e.pageX-t.x,ry=e.pageY-t.y,dx=0,dy=0;
|
||||
if(dojo.isWebKit||dojo.isOpera){
|
||||
rx+=dojo.body().scrollLeft,ry+=dojo.body().scrollTop;
|
||||
}
|
||||
if(rx>0&&rx<b.w){
|
||||
if(rx<w){
|
||||
dx=-w;
|
||||
}else{
|
||||
if(rx>b.w-w){
|
||||
dx=w;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(ry>0&&ry<b.h){
|
||||
if(ry<h){
|
||||
dy=-h;
|
||||
}else{
|
||||
if(ry>b.h-h){
|
||||
dy=h;
|
||||
}
|
||||
}
|
||||
}
|
||||
var _1=n.scrollLeft,_2=n.scrollTop;
|
||||
n.scrollLeft=n.scrollLeft+dx;
|
||||
n.scrollTop=n.scrollTop+dy;
|
||||
if(_1!=n.scrollLeft||_2!=n.scrollTop){
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
try{
|
||||
n=n.parentNode;
|
||||
}
|
||||
catch(x){
|
||||
n=null;
|
||||
}
|
||||
}
|
||||
dojo.dnd.autoScroll(e);
|
||||
|
||||
dojo.dnd._validNodes = {"div": 1, "p": 1, "td": 1};
|
||||
dojo.dnd._validOverflow = {"auto": 1, "scroll": 1};
|
||||
|
||||
dojo.dnd.autoScrollNodes = function(e){
|
||||
// summary:
|
||||
// a handler for onmousemove event, which scrolls the first avaialble
|
||||
// Dom element, it falls back to dojo.dnd.autoScroll()
|
||||
// e: Event
|
||||
// onmousemove event
|
||||
|
||||
// FIXME: needs more docs!
|
||||
for(var n = e.target; n;){
|
||||
if(n.nodeType == 1 && (n.tagName.toLowerCase() in dojo.dnd._validNodes)){
|
||||
var s = dojo.getComputedStyle(n);
|
||||
if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){
|
||||
var b = dojo._getContentBox(n, s), t = dojo.position(n, true);
|
||||
//console.log(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop);
|
||||
var w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2),
|
||||
h = Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL, b.h / 2),
|
||||
rx = e.pageX - t.x, ry = e.pageY - t.y, dx = 0, dy = 0;
|
||||
if(dojo.isWebKit || dojo.isOpera){
|
||||
// FIXME: this code should not be here, it should be taken into account
|
||||
// either by the event fixing code, or the dojo.position()
|
||||
// FIXME: this code doesn't work on Opera 9.5 Beta
|
||||
rx += dojo.body().scrollLeft, ry += dojo.body().scrollTop;
|
||||
}
|
||||
if(rx > 0 && rx < b.w){
|
||||
if(rx < w){
|
||||
dx = -w;
|
||||
}else if(rx > b.w - w){
|
||||
dx = w;
|
||||
}
|
||||
}
|
||||
//console.log("ry =", ry, "b.h =", b.h, "h =", h);
|
||||
if(ry > 0 && ry < b.h){
|
||||
if(ry < h){
|
||||
dy = -h;
|
||||
}else if(ry > b.h - h){
|
||||
dy = h;
|
||||
}
|
||||
}
|
||||
var oldLeft = n.scrollLeft, oldTop = n.scrollTop;
|
||||
n.scrollLeft = n.scrollLeft + dx;
|
||||
n.scrollTop = n.scrollTop + dy;
|
||||
if(oldLeft != n.scrollLeft || oldTop != n.scrollTop){ return; }
|
||||
}
|
||||
}
|
||||
try{
|
||||
n = n.parentNode;
|
||||
}catch(x){
|
||||
n = null;
|
||||
}
|
||||
}
|
||||
dojo.dnd.autoScroll(e);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user