home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / AIMP2 / aimp_2.61.583.exe / $TEMP / YandexPackSetup.msi / fil5416424B66568A2C2422AEBF0D768AD4 < prev    next >
Text File  |  2010-07-12  |  5KB  |  178 lines

  1. function YaDragWindow(aDragElements, aWindow) {
  2.   this.dragElements = [];
  3.   
  4.   for each (var el in aDragElements) {
  5.     var elem = document.getAnonymousElementByAttribute(el, "yadraggable", "true");
  6.     if (elem)
  7.       this.dragElements.push(elem);
  8.   }
  9.   
  10.   if (this.dragElements.length) {
  11.     this.undragElements = [];
  12.     
  13.     for each (var el in aDragElements) {
  14.       var elem = document.getAnonymousElementByAttribute(el, "yadraggable", "false");
  15.       if (elem)
  16.         this.undragElements.push(elem);
  17.     }
  18.     
  19.     this.window = aWindow || window;
  20.     
  21.     this.lastXY = null;
  22.     this.lastTS = null;
  23.     
  24.     this._init();
  25.   }
  26. }
  27.  
  28. YaDragWindow.prototype = {
  29.   _visiblePixels: 40,
  30.   
  31.   _isInited: false,
  32.   
  33.   _init: function() {
  34.     for each (var el in this.dragElements) {
  35.       el.addEventListener("mousedown", this, false);
  36.     }
  37.     
  38.     this.window.addEventListener("unload", this, false);
  39.     this.window.addEventListener("resize", this, false);
  40.     
  41.     this._isInited = true;
  42.     
  43.     this._checkWindowVisible();
  44.   },
  45.   
  46.   _destroy: function() {
  47.     if (!this._isInited)
  48.       return;
  49.     
  50.     for each (var el in this.dragElements) {
  51.       el.removeEventListener("mousedown", this, false);
  52.     }
  53.     
  54.     this.window.removeEventListener("unload", this, false);
  55.     this.window.removeEventListener("resize", this, false);
  56.     
  57.     this.undragElements = null;
  58.     this.dragElements = null;
  59.     this.window = null;
  60.     
  61.     this._isInited = false;
  62.   },
  63.   
  64.   _isEventElementDraggable: function(aEvent) {
  65.     var currentTarget = aEvent.currentTarget;
  66.     if (this.dragElements.some(function(el) { return el == currentTarget; })) {
  67.       
  68.       var originalTarget = aEvent.originalTarget;
  69.       if (!this.undragElements.some(function(el) { return el == originalTarget; }))
  70.         return true;
  71.     }
  72.     
  73.     return false;
  74.   },
  75.   
  76.   _checkWindowVisible: function() {
  77.     var x = 0, y = 0;
  78.     
  79.     var win = this.window;
  80.     
  81.     var xDiff = win.screenX + win.outerWidth - this._visiblePixels;
  82.     if (xDiff < 0) {
  83.       x = xDiff;
  84.     } else {
  85.       xDiff = win.screenX - (win.screen.availLeft + win.screen.availWidth - this._visiblePixels);
  86.       if (xDiff > 0)
  87.         x = xDiff;
  88.     }
  89.     
  90.     var yDiff = win.screenY;
  91.     if (yDiff < 0) {
  92.       y = yDiff;
  93.     } else {
  94.       yDiff = win.screenY - (win.screen.availTop + win.screen.availHeight - this._visiblePixels);
  95.       if (yDiff > 0)
  96.         y = yDiff;
  97.     }
  98.     
  99.     if (x == 0 && y == 0)
  100.       return;
  101.     
  102.     this._handleMouseMove({x: x, y: y});
  103.   },
  104.   
  105.   _handleMouseMove: function(aDiff) {
  106.     var win = this.window;
  107.     
  108.     var x = win.screenX - aDiff.x;
  109.     var y = win.screenY - aDiff.y;
  110.     
  111.     if (x < (-win.outerWidth + this._visiblePixels) ||
  112.         x > (screen.availLeft + screen.availWidth - this._visiblePixels))
  113.       aDiff.x = 0;
  114.     
  115.     if (y < 0 ||
  116.         y > (screen.availTop + screen.availHeight - this._visiblePixels))
  117.       aDiff.y = 0;
  118.     
  119.     if (aDiff.x == 0 && aDiff.y == 0)
  120.       return;
  121.     
  122.     win.moveTo(win.screenX - aDiff.x, win.screenY - aDiff.y);
  123.   },
  124.   
  125.   handleEvent: function(aEvent) {
  126.     switch (aEvent.type) {
  127.       case "unload":
  128.         this._destroy();
  129.         break;
  130.       
  131.       case "mousemove":
  132.         var eventPoints = { x: aEvent.screenX, y: aEvent.screenY };
  133.         
  134.         var ts = Date.now();
  135.         if (ts - this.lastTS < 7)
  136.             return;
  137.         
  138.         this.lastTS = ts;
  139.         
  140.         var diff = {
  141.           x: this.lastXY.x - eventPoints.x,
  142.           y: this.lastXY.y - eventPoints.y
  143.         };
  144.         
  145.         if (diff.x == 0 && diff.y == 0)
  146.           return;
  147.         
  148.         this._handleMouseMove(diff);
  149.         
  150.         this.lastXY = eventPoints;
  151.         
  152.         break;
  153.         
  154.       case "mousedown":
  155.         if (aEvent.button == 0 && this._isEventElementDraggable(aEvent)) {
  156.           this.lastXY = {x: aEvent.screenX, y: aEvent.screenY};
  157.           this.lastTS = Date.now();
  158.           
  159.           this.window.addEventListener("mouseup", this, false);
  160.           this.window.addEventListener("mousemove", this, false);
  161.         }
  162.         
  163.         break;
  164.       
  165.       case "mouseup":
  166.         this.window.removeEventListener("mouseup", this, false);
  167.         this.window.removeEventListener("mousemove", this, false);
  168.         
  169.         this._checkWindowVisible();
  170.         
  171.         break;
  172.       
  173.       case "resize":
  174.         this._checkWindowVisible();
  175.         break;
  176.     }
  177.   }
  178. }