/ext-4.1.0_b3/src/core/dom/Element.static-more.js

https://bitbucket.org/srogerf/javascript · JavaScript · 159 lines · 128 code · 26 blank · 5 comment · 33 complexity · 1b3d58fca44cc9a7cb4f3c46403c5b0e MD5 · raw file

  1. /**
  2. * @class Ext.dom.Element
  3. */
  4. (function(){
  5. var doc = document,
  6. isCSS1 = doc.compatMode == "CSS1Compat",
  7. ELEMENT = Ext.Element,
  8. fly = function(el){
  9. if (!_fly) {
  10. _fly = new Ext.Element.Flyweight();
  11. }
  12. _fly.dom = el;
  13. return _fly;
  14. }, _fly;
  15. Ext.apply(ELEMENT, {
  16. getViewWidth : function(full) {
  17. return full ? ELEMENT.getDocumentWidth() : ELEMENT.getViewportWidth();
  18. },
  19. getViewHeight : function(full) {
  20. return full ? ELEMENT.getDocumentHeight() : ELEMENT.getViewportHeight();
  21. },
  22. getDocumentHeight: function() {
  23. return Math.max(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, ELEMENT.getViewportHeight());
  24. },
  25. getDocumentWidth: function() {
  26. return Math.max(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, ELEMENT.getViewportWidth());
  27. },
  28. getViewportHeight: function(){
  29. return Ext.isIE ?
  30. (Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) :
  31. self.innerHeight;
  32. },
  33. getViewportWidth : function() {
  34. return (!Ext.isStrict && !Ext.isOpera) ? doc.body.clientWidth :
  35. Ext.isIE ? doc.documentElement.clientWidth : self.innerWidth;
  36. },
  37. getY : function(el) {
  38. return ELEMENT.getXY(el)[1];
  39. },
  40. getX : function(el) {
  41. return ELEMENT.getXY(el)[0];
  42. },
  43. getOffsetParent: function (el) {
  44. el = Ext.getDom(el);
  45. try {
  46. // accessing offsetParent can throw "Unspecified Error" in IE6-8 (not 9)
  47. return el.offsetParent;
  48. } catch (e) {
  49. var body = document.body; // safe bet, unless...
  50. return (el == body) ? null : body;
  51. }
  52. },
  53. getXY : function(el) {
  54. var p,
  55. pe,
  56. b,
  57. bt,
  58. bl,
  59. dbd,
  60. x = 0,
  61. y = 0,
  62. scroll,
  63. hasAbsolute,
  64. bd = (doc.body || doc.documentElement),
  65. ret;
  66. el = Ext.getDom(el);
  67. if(el != bd){
  68. hasAbsolute = fly(el).isStyle("position", "absolute");
  69. if (el.getBoundingClientRect) {
  70. try {
  71. b = el.getBoundingClientRect();
  72. scroll = fly(document).getScroll();
  73. ret = [ Math.round(b.left + scroll.left), Math.round(b.top + scroll.top) ];
  74. } catch (e) {
  75. // IE6-8 can also throw from getBoundingClientRect...
  76. }
  77. }
  78. if (!ret) {
  79. for (p = el; p; p = ELEMENT.getOffsetParent(p)) {
  80. pe = fly(p);
  81. x += p.offsetLeft;
  82. y += p.offsetTop;
  83. hasAbsolute = hasAbsolute || pe.isStyle("position", "absolute");
  84. if (Ext.isGecko) {
  85. y += bt = parseInt(pe.getStyle("borderTopWidth"), 10) || 0;
  86. x += bl = parseInt(pe.getStyle("borderLeftWidth"), 10) || 0;
  87. if (p != el && !pe.isStyle('overflow','visible')) {
  88. x += bl;
  89. y += bt;
  90. }
  91. }
  92. }
  93. if (Ext.isSafari && hasAbsolute) {
  94. x -= bd.offsetLeft;
  95. y -= bd.offsetTop;
  96. }
  97. if (Ext.isGecko && !hasAbsolute) {
  98. dbd = fly(bd);
  99. x += parseInt(dbd.getStyle("borderLeftWidth"), 10) || 0;
  100. y += parseInt(dbd.getStyle("borderTopWidth"), 10) || 0;
  101. }
  102. p = el.parentNode;
  103. while (p && p != bd) {
  104. if (!Ext.isOpera || (p.tagName != 'TR' && !fly(p).isStyle("display", "inline"))) {
  105. x -= p.scrollLeft;
  106. y -= p.scrollTop;
  107. }
  108. p = p.parentNode;
  109. }
  110. ret = [x,y];
  111. }
  112. }
  113. return ret || [0,0];
  114. },
  115. setXY : function(el, xy) {
  116. (el = Ext.fly(el, '_setXY')).position();
  117. var pts = el.translatePoints(xy),
  118. style = el.dom.style,
  119. pos;
  120. for (pos in pts) {
  121. if (!isNaN(pts[pos])) {
  122. style[pos] = pts[pos] + "px";
  123. }
  124. }
  125. },
  126. setX : function(el, x) {
  127. ELEMENT.setXY(el, [x, false]);
  128. },
  129. setY : function(el, y) {
  130. ELEMENT.setXY(el, [false, y]);
  131. }
  132. });
  133. })();