JAVASCRIPT   73

YAHOO util Dom

Guest on 15th June 2022 04:52:39 AM

  1. /* Copyright (c)  Yahoo! Inc. All rights reserved. */
  2. YAHOO.util.Dom = new function() {
  3.     this.get = function(el) {
  4.         if (typeof el == 'string') {
  5.             el = document.getElementById(el);
  6.         }
  7.  
  8.         return el;
  9.     };
  10.     this.getStyle = function(el, property) {
  11.         var value = null;
  12.         var dv = document.defaultView;
  13.         el = this.get(el);
  14.         if (property == 'opacity' && el.filters) {
  15.             value = 1;
  16.             try {
  17.                 value = el.filters.item('DXImageTransform.Microsoft.Alpha').opacity / 100;
  18.             } catch (e) {
  19.                 try {
  20.                     value = el.filters.item('alpha').opacity / 100;
  21.                 } catch (e) {}
  22.             }
  23.         } else if (el.style[property]) {
  24.             value = el.style[property];
  25.         } else if (el.currentStyle && el.currentStyle[property]) {
  26.             value = el.currentStyle[property];
  27.         } else if (dv && dv.getComputedStyle)
  28.  
  29.         {
  30.             var converted = '';
  31.             for (i = 0, len = property.length; i < len; ++i) {
  32.                 if (property.charAt(i) == property.charAt(i).toUpperCase()) {
  33.                     converted = converted + '-' + property.charAt(i).toLowerCase();
  34.                 } else {
  35.                     converted = converted + property.charAt(i);
  36.                 }
  37.             }
  38.  
  39.             if (dv.getComputedStyle(el, '').getPropertyValue(converted)) {
  40.                 value = dv.getComputedStyle(el, '').getPropertyValue(converted);
  41.             }
  42.         }
  43.  
  44.         return value;
  45.     };
  46.     this.setStyle = function(el, property, val) {
  47.         el = this.get(el);
  48.         switch (property) {
  49.             case 'opacity':
  50.                 if (el.filters) {
  51.                     el.style.filter = 'alpha(opacity=' + val * 100 + ')';
  52.                     if (!el.currentStyle.hasLayout) {
  53.                         el.style.zoom = 1;
  54.                     }
  55.                 } else {
  56.                     el.style.opacity = val;
  57.                     el.style['-moz-opacity'] = val;
  58.                     el.style['-khtml-opacity'] = val;
  59.                 }
  60.  
  61.                 break;
  62.             default:
  63.                 el.style[property] = val;
  64.         }
  65.     };
  66.     this.getXY = function(el) {
  67.         el = this.get(el);
  68.         if (el.parentNode === null || this.getStyle(el, 'display') == 'none') {
  69.             return false;
  70.         }
  71.  
  72.         var parent = null;
  73.         var pos = [];
  74.         var box;
  75.         if (el.getBoundingClientRect) {
  76.             box = el.getBoundingClientRect();
  77.             var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
  78.             var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
  79.             return [box.left + scrollLeft, box.top + scrollTop];
  80.         } else if (document.getBoxObjectFor) {
  81.             box = document.getBoxObjectFor(el);
  82.             pos = [box.x, box.y];
  83.         } else {
  84.             pos = [el.offsetLeft, el.offsetTop];
  85.             parent = el.offsetParent;
  86.             if (parent != el) {
  87.                 while (parent) {
  88.                     pos[0] += parent.offsetLeft;
  89.                     pos[1] += parent.offsetTop;
  90.                     parent = parent.offsetParent;
  91.                 }
  92.             }
  93.  
  94.             var ua = navigator.userAgent.toLowerCase();
  95.             if (ua.indexOf('opera') != -1 || (ua.indexOf('safari') != -1 && this.getStyle(el, 'position') == 'absolute')) {
  96.                 pos[1] -= document.body.offsetTop;
  97.             }
  98.         }
  99.  
  100.         if (el.parentNode) {
  101.             parent = el.parentNode;
  102.         } else {
  103.             parent = null;
  104.         }
  105.  
  106.         while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') {
  107.             pos[0] -= parent.scrollLeft;
  108.             pos[1] -= parent.scrollTop;
  109.             if (parent.parentNode) {
  110.                 parent = parent.parentNode;
  111.             } else {
  112.                 parent = null;
  113.             }
  114.         }
  115.  
  116.         return pos;
  117.     };
  118.     this.getX = function(el) {
  119.         return this.getXY(el)[0];
  120.     };
  121.     this.getY = function(el) {
  122.         return this.getXY(el)[1];
  123.     };
  124.     this.setXY = function(el, pos, noRetry) {
  125.         el = this.get(el);
  126.         var pageXY = YAHOO.util.Dom.getXY(el);
  127.         if (pageXY === false) {
  128.             return false;
  129.         }
  130.  
  131.         var delta = [parseInt(YAHOO.util.Dom.getStyle(el, 'left'), 10), parseInt(YAHOO.util.Dom.getStyle(el, 'top'), 10)];
  132.         if (isNaN(delta[0])) {
  133.             delta[0] = 0;
  134.         }
  135.  
  136.         if (isNaN(delta[1])) {
  137.             delta[1] = 0;
  138.         }
  139.  
  140.         if (pos[0] !== null) {
  141.             el.style.left = pos[0] - pageXY[0] + delta[0] + 'px';
  142.         }
  143.  
  144.         if (pos[1] !== null) {
  145.             el.style.top = pos[1] - pageXY[1] + delta[1] + 'px';
  146.         }
  147.  
  148.         var newXY = this.getXY(el);
  149.         if (!noRetry && (newXY[0] != pos[0] || newXY[1] != pos[1])) {
  150.             this.setXY(el, pos, true);
  151.         }
  152.  
  153.         return true;
  154.     };
  155.     this.setX = function(el, x) {
  156.         return this.setXY(el, [x, null]);
  157.     };
  158.     this.setY = function(el, y) {
  159.         return this.setXY(el, [null, y]);
  160.     };
  161.     this.getRegion = function(el) {
  162.         el = this.get(el);
  163.         return new YAHOO.util.Region.getRegion(el);
  164.     };
  165.     this.getClientWidth = function() {
  166.         return (document.documentElement.offsetWidth || document.body.offsetWidth);
  167.     };
  168.     this.getClientHeight = function() {
  169.         return (self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);
  170.     };
  171. };
  172. YAHOO.util.Region = function(t, r, b, l) {
  173.     this.top = t;
  174.     this.right = r;
  175.     this.bottom = b;
  176.     this.left = l;
  177. };
  178. YAHOO.util.Region.prototype.contains = function(region) {
  179.     return (region.left >= this.left && region.right <= this.right && region.top >= this.top && region.bottom <= this.bottom);
  180. };
  181. YAHOO.util.Region.prototype.getArea = function() {
  182.     return ((this.bottom - this.top) * (this.right - this.left));
  183. };
  184. YAHOO.util.Region.prototype.intersect = function(region) {
  185.     var t = Math.max(this.top, region.top);
  186.     var r = Math.min(this.right, region.right);
  187.     var b = Math.min(this.bottom, region.bottom);
  188.     var l = Math.max(this.left, region.left);
  189.     if (b >= t && r >= l) {
  190.         return new YAHOO.util.Region(t, r, b, l);
  191.     } else {
  192.         return null;
  193.     }
  194. };
  195. YAHOO.util.Region.prototype.union = function(region) {
  196.     var t = Math.min(this.top, region.top);
  197.     var r = Math.max(this.right, region.right);
  198.     var b = Math.max(this.bottom, region.bottom);
  199.     var l = Math.min(this.left, region.left);
  200.     return new YAHOO.util.Region(t, r, b, l);
  201. };
  202. YAHOO.util.Region.prototype.toString = function() {
  203.     return ("Region {" + "  t: " + this.top + ", r: " + this.right + ", b: " + this.bottom + ", l: " + this.left + "}");
  204. }
  205.  
  206. YAHOO.util.Region.getRegion = function(el) {
  207.     var p = YAHOO.util.Dom.getXY(el);
  208.     var t = p[1];
  209.     var r = p[0] + el.offsetWidth;
  210.     var b = p[1] + el.offsetHeight;
  211.     var l = p[0];
  212.     return new YAHOO.util.Region(t, r, b, l);
  213. };
  214. YAHOO.util.Point = function(x, y) {
  215.     this.x = x;
  216.     this.y = y;
  217.     this.top = y;
  218.     this.right = x;
  219.     this.bottom = y;
  220.     this.left = x;
  221. };
  222. YAHOO.util.Point.prototype = new YAHOO.util.Region();

Raw Paste


Login or Register to edit or fork this paste. It's free.