dom-utils.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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 innerEl = el.children();
  17. var width = el.width();
  18. var height = el.height();
  19. var offset = el.offset();
  20. var innerOffset = innerEl.offset();
  21. var girths = {
  22. left: innerOffset.left - offset.left,
  23. right: offset.left + width - innerOffset.left,
  24. top: innerOffset.top - offset.top,
  25. bottom: offset.top + height - innerOffset.top
  26. };
  27. el.remove();
  28. return girths;
  29. }
  30. function countHandlers(el) {
  31. var hash = getHandlerHash(el);
  32. var cnt = 0;
  33. $.each(hash, function(name, handlers) {
  34. cnt += handlers.length;
  35. });
  36. return cnt;
  37. }
  38. function getHandlerHash(el) {
  39. return $._data($(el)[0], 'events') || {};
  40. }
  41. /* copied from other proj
  42. ----------------------------------------------------------------------------------------------------------------------*/
  43. function doElsMatchSegs(els, segs, segToRectFunc) {
  44. var elRect, found, i, j, k, len, len1, seg, segRect, unmatchedRects;
  45. unmatchedRects = getBoundingRects(els);
  46. if (unmatchedRects.length !== segs.length) {
  47. return false;
  48. }
  49. for (j = 0, len = segs.length; j < len; j++) {
  50. seg = segs[j];
  51. segRect = segToRectFunc(seg);
  52. found = false;
  53. for (i = k = 0, len1 = unmatchedRects.length; k < len1; i = ++k) {
  54. elRect = unmatchedRects[i];
  55. if (isRectsSimilar(elRect, segRect)) {
  56. unmatchedRects.splice(i, 1);
  57. found = true;
  58. break;
  59. }
  60. }
  61. if (!found) {
  62. return false;
  63. }
  64. }
  65. return true;
  66. }
  67. function getBoundingRects(els) {
  68. var node;
  69. return (function() {
  70. var i, len, results;
  71. results = [];
  72. for (i = 0, len = els.length; i < len; i++) {
  73. node = els[i];
  74. results.push(getBoundingRect(node));
  75. }
  76. return results;
  77. })();
  78. }
  79. function getBoundingRect(el) {
  80. var rect;
  81. el = $(el);
  82. expect(el.length).toBe(1);
  83. rect = el.offset();
  84. rect.right = rect.left + el.outerWidth();
  85. rect.bottom = rect.top + el.outerHeight();
  86. rect.node = el[0];
  87. return rect;
  88. }
  89. function isRectsSimilar(rect1, rect2) {
  90. return isRectsHSimilar(rect1, rect2) && isRectsVSimilar(rect1, rect2);
  91. }
  92. function isRectsHSimilar(rect1, rect2) {
  93. return Math.abs(rect1.left - rect2.left) <= 1.1 && Math.abs(rect1.right - rect2.right) <= 1.1;
  94. }
  95. function isRectsVSimilar(rect1, rect2) {
  96. return Math.abs(rect1.top - rect2.top) <= 1.1 && Math.abs(rect1.bottom - rect2.bottom) <= 1.1;
  97. }