dom-utils.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. var RED_REGEX = /red|rgb\(255,\s*0,\s*0\)/;
  2. var GREEN_REGEX = /green|rgb\(0,\s*255,\s*0\)/;
  3. var BLUE_REGEX = /blue|rgb\(0,\s*0,\s*255\)/;
  4. function getStockScrollbarWidths(dir) {
  5. var el = $('<div><div style="position:relative"/></div>')
  6. .css({
  7. position: 'absolute',
  8. top: -1000,
  9. left: 0,
  10. border: 0,
  11. padding: 0,
  12. overflow: 'scroll',
  13. direction: dir || 'ltr'
  14. })
  15. .appendTo('body');
  16. var elRect = el[0].getBoundingClientRect();
  17. var innerEl = el.children();
  18. var innerElRect = innerEl[0].getBoundingClientRect();
  19. var girths = {
  20. left: innerElRect.left - elRect.left,
  21. right: elRect.left + elRect.width - innerElRect.left,
  22. top: innerElRect.top - elRect.top,
  23. bottom: elRect.top + elRect.height - innerElRect.top
  24. };
  25. el.remove();
  26. return girths;
  27. }
  28. function countHandlers(el) {
  29. var hash = getHandlerHash(el);
  30. var cnt = 0;
  31. $.each(hash, function(name, handlers) {
  32. cnt += handlers.length;
  33. });
  34. return cnt;
  35. }
  36. function getHandlerHash(el) {
  37. return $._data($(el)[0], 'events') || {};
  38. }
  39. /* copied from other proj
  40. ----------------------------------------------------------------------------------------------------------------------*/
  41. function doElsMatchSegs(els, segs, segToRectFunc) {
  42. var elRect, found, i, j, k, len, len1, seg, segRect, unmatchedRects;
  43. unmatchedRects = getBoundingRects(els);
  44. if (unmatchedRects.length !== segs.length) {
  45. return false;
  46. }
  47. for (j = 0, len = segs.length; j < len; j++) {
  48. seg = segs[j];
  49. segRect = segToRectFunc(seg);
  50. found = false;
  51. for (i = k = 0, len1 = unmatchedRects.length; k < len1; i = ++k) {
  52. elRect = unmatchedRects[i];
  53. if (isRectsSimilar(elRect, segRect)) {
  54. unmatchedRects.splice(i, 1);
  55. found = true;
  56. break;
  57. }
  58. }
  59. if (!found) {
  60. return false;
  61. }
  62. }
  63. return true;
  64. }
  65. function getBoundingRects(els) {
  66. var node;
  67. return (function() {
  68. var i, len, results;
  69. results = [];
  70. for (i = 0, len = els.length; i < len; i++) {
  71. node = els[i];
  72. results.push(getBoundingRect(node));
  73. }
  74. return results;
  75. })();
  76. }
  77. function getBoundingRect(el) {
  78. var rect;
  79. el = $(el);
  80. expect(el.length).toBe(1);
  81. rect = el.offset();
  82. rect.right = rect.left + el.outerWidth();
  83. rect.bottom = rect.top + el.outerHeight();
  84. rect.node = el[0];
  85. return rect;
  86. }
  87. function isRectsSimilar(rect1, rect2) {
  88. return isRectsHSimilar(rect1, rect2) && isRectsVSimilar(rect1, rect2);
  89. }
  90. function isRectsHSimilar(rect1, rect2) {
  91. return Math.abs(rect1.left - rect2.left) <= 1.1 && Math.abs(rect1.right - rect2.right) <= 1.1;
  92. }
  93. function isRectsVSimilar(rect1, rect2) {
  94. return Math.abs(rect1.top - rect2.top) <= 1.1 && Math.abs(rect1.bottom - rect2.bottom) <= 1.1;
  95. }