tether-rails 1.3.0 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/tether-rails/version.rb +1 -1
- data/vendor/assets/javascripts/tether.js +69 -31
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddb250f38f344b84e3d27862a8532aa42a87622e
|
4
|
+
data.tar.gz: 2eb9af52801f54c97f1778abd413bc391987cf95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a24b0ee1b645bdea205f23b4e571136afcdaf965c2992dd48f56bb4aca505463b847da382b1310838bf5e0c4163d8e2d0414cd920aa6022943628592d979f6f
|
7
|
+
data.tar.gz: 17045483706d99cb68f7423940ca057d68f99d1ac922225bdf2ddae08bee30114fd6106f494c5a877ab190ac57286e433517ae115f500bc051e7fac4ea960ab9
|
data/lib/tether-rails/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! tether 1.3.
|
1
|
+
/*! tether 1.3.3 */
|
2
2
|
|
3
3
|
(function(root, factory) {
|
4
4
|
if (typeof define === 'function' && define.amd) {
|
@@ -23,6 +23,32 @@ if (typeof TetherBase === 'undefined') {
|
|
23
23
|
|
24
24
|
var zeroElement = null;
|
25
25
|
|
26
|
+
// Same as native getBoundingClientRect, except it takes into account parent <frame> offsets
|
27
|
+
// if the element lies within a nested document (<frame> or <iframe>-like).
|
28
|
+
function getActualBoundingClientRect(node) {
|
29
|
+
var boundingRect = node.getBoundingClientRect();
|
30
|
+
|
31
|
+
// The original object returned by getBoundingClientRect is immutable, so we clone it
|
32
|
+
// We can't use extend because the properties are not considered part of the object by hasOwnProperty in IE9
|
33
|
+
var rect = {};
|
34
|
+
for (var k in boundingRect) {
|
35
|
+
rect[k] = boundingRect[k];
|
36
|
+
}
|
37
|
+
|
38
|
+
if (node.ownerDocument !== document) {
|
39
|
+
var _frameElement = node.ownerDocument.defaultView.frameElement;
|
40
|
+
if (_frameElement) {
|
41
|
+
var frameRect = getActualBoundingClientRect(_frameElement);
|
42
|
+
rect.top += frameRect.top;
|
43
|
+
rect.bottom += frameRect.top;
|
44
|
+
rect.left += frameRect.left;
|
45
|
+
rect.right += frameRect.left;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
return rect;
|
50
|
+
}
|
51
|
+
|
26
52
|
function getScrollParents(el) {
|
27
53
|
// In firefox if the el is inside an iframe with display: none; window.getComputedStyle() will return null;
|
28
54
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=548397
|
@@ -58,7 +84,13 @@ function getScrollParents(el) {
|
|
58
84
|
}
|
59
85
|
}
|
60
86
|
|
61
|
-
parents.push(
|
87
|
+
parents.push(el.ownerDocument.body);
|
88
|
+
|
89
|
+
// If the node is within a frame, account for the parent window scroll
|
90
|
+
if (el.ownerDocument !== document) {
|
91
|
+
parents.push(el.ownerDocument.defaultView);
|
92
|
+
}
|
93
|
+
|
62
94
|
return parents;
|
63
95
|
}
|
64
96
|
|
@@ -92,13 +124,7 @@ var getOrigin = function getOrigin() {
|
|
92
124
|
|
93
125
|
var id = node.getAttribute('data-tether-id');
|
94
126
|
if (typeof zeroPosCache[id] === 'undefined') {
|
95
|
-
zeroPosCache[id] =
|
96
|
-
|
97
|
-
var rect = node.getBoundingClientRect();
|
98
|
-
for (var k in rect) {
|
99
|
-
// Can't use extend, as on IE9, elements don't resolve to be hasOwnProperty
|
100
|
-
zeroPosCache[id][k] = rect[k];
|
101
|
-
}
|
127
|
+
zeroPosCache[id] = getActualBoundingClientRect(node);
|
102
128
|
|
103
129
|
// Clear the cache when this position call is done
|
104
130
|
defer(function () {
|
@@ -110,8 +136,10 @@ var getOrigin = function getOrigin() {
|
|
110
136
|
};
|
111
137
|
|
112
138
|
function removeUtilElements() {
|
113
|
-
|
114
|
-
|
139
|
+
if (zeroElement) {
|
140
|
+
document.body.removeChild(zeroElement);
|
141
|
+
}
|
142
|
+
zeroElement = null;
|
115
143
|
};
|
116
144
|
|
117
145
|
function getBounds(el) {
|
@@ -125,13 +153,7 @@ function getBounds(el) {
|
|
125
153
|
|
126
154
|
var docEl = doc.documentElement;
|
127
155
|
|
128
|
-
var box =
|
129
|
-
// The original object returned by getBoundingClientRect is immutable, so we clone it
|
130
|
-
// We can't use extend because the properties are not considered part of the object by hasOwnProperty in IE9
|
131
|
-
var rect = el.getBoundingClientRect();
|
132
|
-
for (var k in rect) {
|
133
|
-
box[k] = rect[k];
|
134
|
-
}
|
156
|
+
var box = getActualBoundingClientRect(el);
|
135
157
|
|
136
158
|
var origin = getOrigin();
|
137
159
|
|
@@ -250,7 +272,9 @@ function hasClass(el, name) {
|
|
250
272
|
}
|
251
273
|
|
252
274
|
function getClassName(el) {
|
253
|
-
|
275
|
+
// Can't use just SVGAnimatedString here since nodes within a Frame in IE have
|
276
|
+
// completely separately SVGAnimatedString base classes
|
277
|
+
if (el.className instanceof el.ownerDocument.defaultView.SVGAnimatedString) {
|
254
278
|
return el.className.baseVal;
|
255
279
|
}
|
256
280
|
return el.className;
|
@@ -315,7 +339,7 @@ var Evented = (function () {
|
|
315
339
|
}, {
|
316
340
|
key: 'off',
|
317
341
|
value: function off(event, handler) {
|
318
|
-
if (typeof this.bindings
|
342
|
+
if (typeof this.bindings === 'undefined' || typeof this.bindings[event] === 'undefined') {
|
319
343
|
return;
|
320
344
|
}
|
321
345
|
|
@@ -369,6 +393,7 @@ var Evented = (function () {
|
|
369
393
|
})();
|
370
394
|
|
371
395
|
TetherBase.Utils = {
|
396
|
+
getActualBoundingClientRect: getActualBoundingClientRect,
|
372
397
|
getScrollParents: getScrollParents,
|
373
398
|
getBounds: getBounds,
|
374
399
|
getOffsetParent: getOffsetParent,
|
@@ -427,7 +452,7 @@ var transformKey = (function () {
|
|
427
452
|
}
|
428
453
|
var el = document.createElement('div');
|
429
454
|
|
430
|
-
var transforms = ['transform', '
|
455
|
+
var transforms = ['transform', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform'];
|
431
456
|
for (var i = 0; i < transforms.length; ++i) {
|
432
457
|
var key = transforms[i];
|
433
458
|
if (el.style[key] !== undefined) {
|
@@ -472,7 +497,7 @@ function now() {
|
|
472
497
|
return;
|
473
498
|
}
|
474
499
|
|
475
|
-
if (
|
500
|
+
if (pendingTimeout != null) {
|
476
501
|
clearTimeout(pendingTimeout);
|
477
502
|
pendingTimeout = null;
|
478
503
|
}
|
@@ -826,7 +851,7 @@ var TetherClass = (function (_Evented) {
|
|
826
851
|
this.enabled = true;
|
827
852
|
|
828
853
|
this.scrollParents.forEach(function (parent) {
|
829
|
-
if (parent !==
|
854
|
+
if (parent !== _this3.target.ownerDocument) {
|
830
855
|
parent.addEventListener('scroll', _this3.position);
|
831
856
|
}
|
832
857
|
});
|
@@ -1026,21 +1051,24 @@ var TetherClass = (function (_Evented) {
|
|
1026
1051
|
}
|
1027
1052
|
};
|
1028
1053
|
|
1054
|
+
var doc = this.target.ownerDocument;
|
1055
|
+
var win = doc.defaultView;
|
1056
|
+
|
1029
1057
|
var scrollbarSize = undefined;
|
1030
|
-
if (
|
1058
|
+
if (doc.body.scrollWidth > win.innerWidth) {
|
1031
1059
|
scrollbarSize = this.cache('scrollbar-size', getScrollBarSize);
|
1032
1060
|
next.viewport.bottom -= scrollbarSize.height;
|
1033
1061
|
}
|
1034
1062
|
|
1035
|
-
if (
|
1063
|
+
if (doc.body.scrollHeight > win.innerHeight) {
|
1036
1064
|
scrollbarSize = this.cache('scrollbar-size', getScrollBarSize);
|
1037
1065
|
next.viewport.right -= scrollbarSize.width;
|
1038
1066
|
}
|
1039
1067
|
|
1040
|
-
if (['', 'static'].indexOf(
|
1068
|
+
if (['', 'static'].indexOf(doc.body.style.position) === -1 || ['', 'static'].indexOf(doc.body.parentElement.style.position) === -1) {
|
1041
1069
|
// Absolute positioning in the body will be relative to the page, not the 'initial containing block'
|
1042
|
-
next.page.bottom =
|
1043
|
-
next.page.right =
|
1070
|
+
next.page.bottom = doc.body.scrollHeight - top - height;
|
1071
|
+
next.page.right = doc.body.scrollWidth - left - width;
|
1044
1072
|
}
|
1045
1073
|
|
1046
1074
|
if (typeof this.options.optimizations !== 'undefined' && this.options.optimizations.moveElement !== false && !(typeof this.targetModifier !== 'undefined')) {
|
@@ -1059,8 +1087,8 @@ var TetherClass = (function (_Evented) {
|
|
1059
1087
|
offsetBorder[side.toLowerCase()] = parseFloat(offsetParentStyle['border' + side + 'Width']);
|
1060
1088
|
});
|
1061
1089
|
|
1062
|
-
offsetPosition.right =
|
1063
|
-
offsetPosition.bottom =
|
1090
|
+
offsetPosition.right = doc.body.scrollWidth - offsetPosition.left - offsetParentSize.width + offsetBorder.right;
|
1091
|
+
offsetPosition.bottom = doc.body.scrollHeight - offsetPosition.top - offsetParentSize.height + offsetBorder.bottom;
|
1064
1092
|
|
1065
1093
|
if (next.page.top >= offsetPosition.top + offsetBorder.top && next.page.bottom >= offsetPosition.bottom) {
|
1066
1094
|
if (next.page.left >= offsetPosition.left + offsetBorder.left && next.page.right >= offsetPosition.right) {
|
@@ -1218,7 +1246,7 @@ var TetherClass = (function (_Evented) {
|
|
1218
1246
|
|
1219
1247
|
if (!offsetParentIsBody) {
|
1220
1248
|
this.element.parentNode.removeChild(this.element);
|
1221
|
-
|
1249
|
+
this.element.ownerDocument.body.appendChild(this.element);
|
1222
1250
|
}
|
1223
1251
|
}
|
1224
1252
|
|
@@ -1278,12 +1306,22 @@ function getBoundingRect(tether, to) {
|
|
1278
1306
|
|
1279
1307
|
if (typeof to.nodeType !== 'undefined') {
|
1280
1308
|
(function () {
|
1309
|
+
var node = to;
|
1281
1310
|
var size = getBounds(to);
|
1282
1311
|
var pos = size;
|
1283
1312
|
var style = getComputedStyle(to);
|
1284
1313
|
|
1285
1314
|
to = [pos.left, pos.top, size.width + pos.left, size.height + pos.top];
|
1286
1315
|
|
1316
|
+
// Account any parent Frames scroll offset
|
1317
|
+
if (node.ownerDocument !== document) {
|
1318
|
+
var win = node.ownerDocument.defaultView;
|
1319
|
+
to[0] += win.pageXOffset;
|
1320
|
+
to[1] += win.pageYOffset;
|
1321
|
+
to[2] += win.pageXOffset;
|
1322
|
+
to[3] += win.pageYOffset;
|
1323
|
+
}
|
1324
|
+
|
1287
1325
|
BOUNDS_FORMAT.forEach(function (side, i) {
|
1288
1326
|
side = side[0].toUpperCase() + side.substr(1);
|
1289
1327
|
if (side === 'Top' || side === 'Left') {
|