dojo/dnd/autoscroll.js

  • Provides:

    • dojo.dnd.autoscroll
  • dojo.dnd._validNodes

    • type
      Object
    • summary
  • dojo.dnd._validNodes.div

    • summary
  • dojo.dnd._validNodes.p

    • summary
  • dojo.dnd._validNodes.td

    • summary
  • dojo.dnd._validOverflow

    • type
      Object
    • summary
  • dojo.dnd._validOverflow.auto

    • summary
  • dojo.dnd._validOverflow.scroll

    • summary
  • dojo.dnd.autoScroll

    • type
      Function
    • parameters:
      • e: (typeof )
    • source: [view]
      define("dojo/dnd/autoscroll", ["dojo", "dojo/window"], function(dojo) {
      dojo.getObject("dnd", true, dojo);


      dojo.dnd.getViewport = dojo.window.getBox;


      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.window.getBox(), 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);
    • summary
      a handler for onmousemove event, which scrolls the window, if
      necesary
  • dojo.dnd.autoScrollNodes

    • type
      Function
    • parameters:
      • e: (typeof )
    • source: [view]
      define("dojo/dnd/autoscroll", ["dojo", "dojo/window"], function(dojo) {
      dojo.getObject("dnd", true, dojo);


      dojo.dnd.getViewport = dojo.window.getBox;


      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.window.getBox(), 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){
       // 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);
    • summary
      a handler for onmousemove event, which scrolls the first avaialble
      Dom element, it falls back to dojo.dnd.autoScroll()
  • dojo.dnd.getViewport

    • summary
  • dojo.dnd.V_TRIGGER_AUTOSCROLL

    • summary
  • dojo.dnd.H_TRIGGER_AUTOSCROLL

    • summary
  • dojo.dnd.V_AUTOSCROLL_VALUE

    • summary
  • dojo.dnd.H_AUTOSCROLL_VALUE

    • summary
  • dojo.dnd.autoscroll

    • type
      Object
    • summary
  • dojo.dnd

    • type
      Object
    • summary
  • dojo

    • type
      Object
    • summary