tether-rails 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +2 -1
- data/Rakefile +1 -0
- data/lib/tether-rails/version.rb +1 -1
- data/tether-rails.gemspec +25 -0
- data/vendor/assets/javascripts/tether.js +99 -71
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de93ccccb7666876b9d68581ce49a5df0c5cf475
|
4
|
+
data.tar.gz: 8a0732631e09bd1e1c980be57d3c51839d163cd6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 028f121b23f8893ddc6abe0583381bc3cb614de3106fb5737662fa97319f63dbe86251565d3f206b5e93af09d11ea42a1d3a318593bc3b6b8f65eeb065a32bb4
|
7
|
+
data.tar.gz: 190be216ade2240c328c34869153342386158b8f7f66282ab62ec21475a9481a492f4efe476e1b90664424bf0bb1c8330c50a500bb1aae07c795b0ee2ecfdf11
|
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Jake Gavin
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/tether-rails.svg)](https://badge.fury.io/rb/tether-rails)
|
1
2
|
# tether-rails
|
2
3
|
|
3
4
|
This gem wraps the [Tether](http://tether.io/docs/welcome/) JavaScript library so that it can be included easily in the Rails asset pipeline.
|
@@ -13,7 +14,7 @@ and run `bundle install`
|
|
13
14
|
|
14
15
|
Then, add tether-rails to your `application.js` manifest
|
15
16
|
```
|
16
|
-
//= require tether
|
17
|
+
//= require tether
|
17
18
|
```
|
18
19
|
and include the stylesheets in your `application.css` manifest
|
19
20
|
```
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/tether-rails/version.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'tether-rails/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "tether-rails"
|
8
|
+
spec.version = TetherRails::VERSION
|
9
|
+
spec.authors = ["Jake Gavin"]
|
10
|
+
spec.email = ["jakegavin@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = "tether-rails wraps the Tether JavaScript library so that it can easily be included in Rails."
|
13
|
+
spec.homepage = "https://github.com/jakegavin/tether-rails"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "rails", ">= 3.1"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! tether 1.
|
1
|
+
/*! tether 1.3.0 */
|
2
2
|
|
3
3
|
(function(root, factory) {
|
4
4
|
if (typeof define === 'function' && define.amd) {
|
@@ -21,25 +21,29 @@ if (typeof TetherBase === 'undefined') {
|
|
21
21
|
TetherBase = { modules: [] };
|
22
22
|
}
|
23
23
|
|
24
|
-
|
24
|
+
var zeroElement = null;
|
25
|
+
|
26
|
+
function getScrollParents(el) {
|
25
27
|
// In firefox if the el is inside an iframe with display: none; window.getComputedStyle() will return null;
|
26
28
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=548397
|
27
29
|
var computedStyle = getComputedStyle(el) || {};
|
28
30
|
var position = computedStyle.position;
|
31
|
+
var parents = [];
|
29
32
|
|
30
33
|
if (position === 'fixed') {
|
31
|
-
return el;
|
34
|
+
return [el];
|
32
35
|
}
|
33
36
|
|
34
37
|
var parent = el;
|
35
|
-
while (parent = parent.parentNode) {
|
38
|
+
while ((parent = parent.parentNode) && parent && parent.nodeType === 1) {
|
36
39
|
var style = undefined;
|
37
40
|
try {
|
38
41
|
style = getComputedStyle(parent);
|
39
42
|
} catch (err) {}
|
40
43
|
|
41
44
|
if (typeof style === 'undefined' || style === null) {
|
42
|
-
|
45
|
+
parents.push(parent);
|
46
|
+
return parents;
|
43
47
|
}
|
44
48
|
|
45
49
|
var _style = style;
|
@@ -49,12 +53,13 @@ function getScrollParent(el) {
|
|
49
53
|
|
50
54
|
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
51
55
|
if (position !== 'absolute' || ['relative', 'absolute', 'fixed'].indexOf(style.position) >= 0) {
|
52
|
-
|
56
|
+
parents.push(parent);
|
53
57
|
}
|
54
58
|
}
|
55
59
|
}
|
56
60
|
|
57
|
-
|
61
|
+
parents.push(document.body);
|
62
|
+
return parents;
|
58
63
|
}
|
59
64
|
|
60
65
|
var uniqueId = (function () {
|
@@ -65,14 +70,14 @@ var uniqueId = (function () {
|
|
65
70
|
})();
|
66
71
|
|
67
72
|
var zeroPosCache = {};
|
68
|
-
var getOrigin = function getOrigin(
|
73
|
+
var getOrigin = function getOrigin() {
|
69
74
|
// getBoundingClientRect is unfortunately too accurate. It introduces a pixel or two of
|
70
75
|
// jitter as the user scrolls that messes with our ability to detect if two positions
|
71
76
|
// are equivilant or not. We place an element at the top left of the page that will
|
72
77
|
// get the same jitter, so we can cancel the two out.
|
73
|
-
var node =
|
74
|
-
if (
|
75
|
-
node =
|
78
|
+
var node = zeroElement;
|
79
|
+
if (!node) {
|
80
|
+
node = document.createElement('div');
|
76
81
|
node.setAttribute('data-tether-id', uniqueId());
|
77
82
|
extend(node.style, {
|
78
83
|
top: 0,
|
@@ -80,9 +85,9 @@ var getOrigin = function getOrigin(doc) {
|
|
80
85
|
position: 'absolute'
|
81
86
|
});
|
82
87
|
|
83
|
-
|
88
|
+
document.body.appendChild(node);
|
84
89
|
|
85
|
-
|
90
|
+
zeroElement = node;
|
86
91
|
}
|
87
92
|
|
88
93
|
var id = node.getAttribute('data-tether-id');
|
@@ -104,6 +109,11 @@ var getOrigin = function getOrigin(doc) {
|
|
104
109
|
return zeroPosCache[id];
|
105
110
|
};
|
106
111
|
|
112
|
+
function removeUtilElements() {
|
113
|
+
document.body.removeChild(zeroElement);
|
114
|
+
zeroElement = undefined;
|
115
|
+
};
|
116
|
+
|
107
117
|
function getBounds(el) {
|
108
118
|
var doc = undefined;
|
109
119
|
if (el === document) {
|
@@ -123,7 +133,7 @@ function getBounds(el) {
|
|
123
133
|
box[k] = rect[k];
|
124
134
|
}
|
125
135
|
|
126
|
-
var origin = getOrigin(
|
136
|
+
var origin = getOrigin();
|
127
137
|
|
128
138
|
box.top -= origin.top;
|
129
139
|
box.left -= origin.left;
|
@@ -359,7 +369,7 @@ var Evented = (function () {
|
|
359
369
|
})();
|
360
370
|
|
361
371
|
TetherBase.Utils = {
|
362
|
-
|
372
|
+
getScrollParents: getScrollParents,
|
363
373
|
getBounds: getBounds,
|
364
374
|
getOffsetParent: getOffsetParent,
|
365
375
|
extend: extend,
|
@@ -371,7 +381,8 @@ TetherBase.Utils = {
|
|
371
381
|
flush: flush,
|
372
382
|
uniqueId: uniqueId,
|
373
383
|
Evented: Evented,
|
374
|
-
getScrollBarSize: getScrollBarSize
|
384
|
+
getScrollBarSize: getScrollBarSize,
|
385
|
+
removeUtilElements: removeUtilElements
|
375
386
|
};
|
376
387
|
/* globals TetherBase, performance */
|
377
388
|
|
@@ -381,14 +392,18 @@ var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr =
|
|
381
392
|
|
382
393
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
383
394
|
|
395
|
+
var _get = function get(_x6, _x7, _x8) { var _again = true; _function: while (_again) { var object = _x6, property = _x7, receiver = _x8; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x6 = parent; _x7 = property; _x8 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
396
|
+
|
384
397
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
385
398
|
|
399
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
400
|
+
|
386
401
|
if (typeof TetherBase === 'undefined') {
|
387
402
|
throw new Error('You must include the utils.js file before tether.js');
|
388
403
|
}
|
389
404
|
|
390
405
|
var _TetherBase$Utils = TetherBase.Utils;
|
391
|
-
var
|
406
|
+
var getScrollParents = _TetherBase$Utils.getScrollParents;
|
392
407
|
var getBounds = _TetherBase$Utils.getBounds;
|
393
408
|
var getOffsetParent = _TetherBase$Utils.getOffsetParent;
|
394
409
|
var extend = _TetherBase$Utils.extend;
|
@@ -398,6 +413,7 @@ var updateClasses = _TetherBase$Utils.updateClasses;
|
|
398
413
|
var defer = _TetherBase$Utils.defer;
|
399
414
|
var flush = _TetherBase$Utils.flush;
|
400
415
|
var getScrollBarSize = _TetherBase$Utils.getScrollBarSize;
|
416
|
+
var removeUtilElements = _TetherBase$Utils.removeUtilElements;
|
401
417
|
|
402
418
|
function within(a, b) {
|
403
419
|
var diff = arguments.length <= 2 || arguments[2] === undefined ? 1 : arguments[2];
|
@@ -466,7 +482,7 @@ function now() {
|
|
466
482
|
lastDuration = now() - lastCall;
|
467
483
|
};
|
468
484
|
|
469
|
-
if (typeof window !== 'undefined') {
|
485
|
+
if (typeof window !== 'undefined' && typeof window.addEventListener !== 'undefined') {
|
470
486
|
['resize', 'scroll', 'touchmove'].forEach(function (event) {
|
471
487
|
window.addEventListener(event, tick);
|
472
488
|
});
|
@@ -572,12 +588,15 @@ var parseOffset = function parseOffset(value) {
|
|
572
588
|
};
|
573
589
|
var parseAttachment = parseOffset;
|
574
590
|
|
575
|
-
var TetherClass = (function () {
|
591
|
+
var TetherClass = (function (_Evented) {
|
592
|
+
_inherits(TetherClass, _Evented);
|
593
|
+
|
576
594
|
function TetherClass(options) {
|
577
595
|
var _this = this;
|
578
596
|
|
579
597
|
_classCallCheck(this, TetherClass);
|
580
598
|
|
599
|
+
_get(Object.getPrototypeOf(TetherClass.prototype), 'constructor', this).call(this);
|
581
600
|
this.position = this.position.bind(this);
|
582
601
|
|
583
602
|
tethers.push(this);
|
@@ -668,14 +687,14 @@ var TetherClass = (function () {
|
|
668
687
|
this.offset = parseOffset(this.options.offset);
|
669
688
|
this.targetOffset = parseOffset(this.options.targetOffset);
|
670
689
|
|
671
|
-
if (typeof this.
|
690
|
+
if (typeof this.scrollParents !== 'undefined') {
|
672
691
|
this.disable();
|
673
692
|
}
|
674
693
|
|
675
694
|
if (this.targetModifier === 'scroll-handle') {
|
676
|
-
this.
|
695
|
+
this.scrollParents = [this.target];
|
677
696
|
} else {
|
678
|
-
this.
|
697
|
+
this.scrollParents = getScrollParents(this.target);
|
679
698
|
}
|
680
699
|
|
681
700
|
if (!(this.options.enabled === false)) {
|
@@ -796,6 +815,8 @@ var TetherClass = (function () {
|
|
796
815
|
}, {
|
797
816
|
key: 'enable',
|
798
817
|
value: function enable() {
|
818
|
+
var _this3 = this;
|
819
|
+
|
799
820
|
var pos = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
|
800
821
|
|
801
822
|
if (!(this.options.addTargetClasses === false)) {
|
@@ -804,9 +825,11 @@ var TetherClass = (function () {
|
|
804
825
|
addClass(this.element, this.getClass('enabled'));
|
805
826
|
this.enabled = true;
|
806
827
|
|
807
|
-
|
808
|
-
|
809
|
-
|
828
|
+
this.scrollParents.forEach(function (parent) {
|
829
|
+
if (parent !== document) {
|
830
|
+
parent.addEventListener('scroll', _this3.position);
|
831
|
+
}
|
832
|
+
});
|
810
833
|
|
811
834
|
if (pos) {
|
812
835
|
this.position();
|
@@ -815,32 +838,40 @@ var TetherClass = (function () {
|
|
815
838
|
}, {
|
816
839
|
key: 'disable',
|
817
840
|
value: function disable() {
|
841
|
+
var _this4 = this;
|
842
|
+
|
818
843
|
removeClass(this.target, this.getClass('enabled'));
|
819
844
|
removeClass(this.element, this.getClass('enabled'));
|
820
845
|
this.enabled = false;
|
821
846
|
|
822
|
-
if (typeof this.
|
823
|
-
this.
|
847
|
+
if (typeof this.scrollParents !== 'undefined') {
|
848
|
+
this.scrollParents.forEach(function (parent) {
|
849
|
+
parent.removeEventListener('scroll', _this4.position);
|
850
|
+
});
|
824
851
|
}
|
825
852
|
}
|
826
853
|
}, {
|
827
854
|
key: 'destroy',
|
828
855
|
value: function destroy() {
|
829
|
-
var
|
856
|
+
var _this5 = this;
|
830
857
|
|
831
858
|
this.disable();
|
832
859
|
|
833
860
|
tethers.forEach(function (tether, i) {
|
834
|
-
if (tether ===
|
861
|
+
if (tether === _this5) {
|
835
862
|
tethers.splice(i, 1);
|
836
|
-
return;
|
837
863
|
}
|
838
864
|
});
|
865
|
+
|
866
|
+
// Remove any elements we were using for convenience from the DOM
|
867
|
+
if (tethers.length === 0) {
|
868
|
+
removeUtilElements();
|
869
|
+
}
|
839
870
|
}
|
840
871
|
}, {
|
841
872
|
key: 'updateAttachClasses',
|
842
873
|
value: function updateAttachClasses(elementAttach, targetAttach) {
|
843
|
-
var
|
874
|
+
var _this6 = this;
|
844
875
|
|
845
876
|
elementAttach = elementAttach || this.attachment;
|
846
877
|
targetAttach = targetAttach || this.targetAttachment;
|
@@ -873,27 +904,27 @@ var TetherClass = (function () {
|
|
873
904
|
|
874
905
|
var all = [];
|
875
906
|
sides.forEach(function (side) {
|
876
|
-
all.push(
|
877
|
-
all.push(
|
907
|
+
all.push(_this6.getClass('element-attached') + '-' + side);
|
908
|
+
all.push(_this6.getClass('target-attached') + '-' + side);
|
878
909
|
});
|
879
910
|
|
880
911
|
defer(function () {
|
881
|
-
if (!(typeof
|
912
|
+
if (!(typeof _this6._addAttachClasses !== 'undefined')) {
|
882
913
|
return;
|
883
914
|
}
|
884
915
|
|
885
|
-
updateClasses(
|
886
|
-
if (!(
|
887
|
-
updateClasses(
|
916
|
+
updateClasses(_this6.element, _this6._addAttachClasses, all);
|
917
|
+
if (!(_this6.options.addTargetClasses === false)) {
|
918
|
+
updateClasses(_this6.target, _this6._addAttachClasses, all);
|
888
919
|
}
|
889
920
|
|
890
|
-
delete
|
921
|
+
delete _this6._addAttachClasses;
|
891
922
|
});
|
892
923
|
}
|
893
924
|
}, {
|
894
925
|
key: 'position',
|
895
926
|
value: function position() {
|
896
|
-
var
|
927
|
+
var _this7 = this;
|
897
928
|
|
898
929
|
var flushChanges = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
|
899
930
|
|
@@ -912,7 +943,7 @@ var TetherClass = (function () {
|
|
912
943
|
this.updateAttachClasses(this.attachment, targetAttachment);
|
913
944
|
|
914
945
|
var elementPos = this.cache('element-bounds', function () {
|
915
|
-
return getBounds(
|
946
|
+
return getBounds(_this7.element);
|
916
947
|
});
|
917
948
|
|
918
949
|
var width = elementPos.width;
|
@@ -930,7 +961,7 @@ var TetherClass = (function () {
|
|
930
961
|
}
|
931
962
|
|
932
963
|
var targetPos = this.cache('target-bounds', function () {
|
933
|
-
return
|
964
|
+
return _this7.getTargetBounds();
|
934
965
|
});
|
935
966
|
var targetSize = targetPos;
|
936
967
|
|
@@ -1014,10 +1045,10 @@ var TetherClass = (function () {
|
|
1014
1045
|
|
1015
1046
|
if (typeof this.options.optimizations !== 'undefined' && this.options.optimizations.moveElement !== false && !(typeof this.targetModifier !== 'undefined')) {
|
1016
1047
|
(function () {
|
1017
|
-
var offsetParent =
|
1018
|
-
return getOffsetParent(
|
1048
|
+
var offsetParent = _this7.cache('target-offsetparent', function () {
|
1049
|
+
return getOffsetParent(_this7.target);
|
1019
1050
|
});
|
1020
|
-
var offsetPosition =
|
1051
|
+
var offsetPosition = _this7.cache('target-offsetparent-bounds', function () {
|
1021
1052
|
return getBounds(offsetParent);
|
1022
1053
|
});
|
1023
1054
|
var offsetParentStyle = getComputedStyle(offsetParent);
|
@@ -1070,7 +1101,7 @@ var TetherClass = (function () {
|
|
1070
1101
|
}, {
|
1071
1102
|
key: 'move',
|
1072
1103
|
value: function move(pos) {
|
1073
|
-
var
|
1104
|
+
var _this8 = this;
|
1074
1105
|
|
1075
1106
|
if (!(typeof this.element.parentNode !== 'undefined')) {
|
1076
1107
|
return;
|
@@ -1101,8 +1132,8 @@ var TetherClass = (function () {
|
|
1101
1132
|
var css = { top: '', left: '', right: '', bottom: '' };
|
1102
1133
|
|
1103
1134
|
var transcribe = function transcribe(_same, _pos) {
|
1104
|
-
var hasOptimizations = typeof
|
1105
|
-
var gpu = hasOptimizations ?
|
1135
|
+
var hasOptimizations = typeof _this8.options.optimizations !== 'undefined';
|
1136
|
+
var gpu = hasOptimizations ? _this8.options.optimizations.gpu : null;
|
1106
1137
|
if (gpu !== false) {
|
1107
1138
|
var yPos = undefined,
|
1108
1139
|
xPos = undefined;
|
@@ -1154,14 +1185,14 @@ var TetherClass = (function () {
|
|
1154
1185
|
} else if (typeof same.offset !== 'undefined' && same.offset.top && same.offset.left) {
|
1155
1186
|
(function () {
|
1156
1187
|
css.position = 'absolute';
|
1157
|
-
var offsetParent =
|
1158
|
-
return getOffsetParent(
|
1188
|
+
var offsetParent = _this8.cache('target-offsetparent', function () {
|
1189
|
+
return getOffsetParent(_this8.target);
|
1159
1190
|
});
|
1160
1191
|
|
1161
|
-
if (getOffsetParent(
|
1192
|
+
if (getOffsetParent(_this8.element) !== offsetParent) {
|
1162
1193
|
defer(function () {
|
1163
|
-
|
1164
|
-
offsetParent.appendChild(
|
1194
|
+
_this8.element.parentNode.removeChild(_this8.element);
|
1195
|
+
offsetParent.appendChild(_this8.element);
|
1165
1196
|
});
|
1166
1197
|
}
|
1167
1198
|
|
@@ -1176,7 +1207,7 @@ var TetherClass = (function () {
|
|
1176
1207
|
if (!moved) {
|
1177
1208
|
var offsetParentIsBody = true;
|
1178
1209
|
var currentNode = this.element.parentNode;
|
1179
|
-
while (currentNode && currentNode.tagName !== 'BODY') {
|
1210
|
+
while (currentNode && currentNode.nodeType === 1 && currentNode.tagName !== 'BODY') {
|
1180
1211
|
if (getComputedStyle(currentNode).position !== 'static') {
|
1181
1212
|
offsetParentIsBody = false;
|
1182
1213
|
break;
|
@@ -1198,11 +1229,6 @@ var TetherClass = (function () {
|
|
1198
1229
|
var val = css[key];
|
1199
1230
|
var elVal = this.element.style[key];
|
1200
1231
|
|
1201
|
-
if (elVal !== '' && val !== '' && ['top', 'left', 'bottom', 'right'].indexOf(key) >= 0) {
|
1202
|
-
elVal = parseFloat(elVal);
|
1203
|
-
val = parseFloat(val);
|
1204
|
-
}
|
1205
|
-
|
1206
1232
|
if (elVal !== val) {
|
1207
1233
|
write = true;
|
1208
1234
|
writeCSS[key] = val;
|
@@ -1211,14 +1237,14 @@ var TetherClass = (function () {
|
|
1211
1237
|
|
1212
1238
|
if (write) {
|
1213
1239
|
defer(function () {
|
1214
|
-
extend(
|
1240
|
+
extend(_this8.element.style, writeCSS);
|
1215
1241
|
});
|
1216
1242
|
}
|
1217
1243
|
}
|
1218
1244
|
}]);
|
1219
1245
|
|
1220
1246
|
return TetherClass;
|
1221
|
-
})();
|
1247
|
+
})(Evented);
|
1222
1248
|
|
1223
1249
|
TetherClass.modules = [];
|
1224
1250
|
|
@@ -1241,7 +1267,7 @@ var BOUNDS_FORMAT = ['left', 'top', 'right', 'bottom'];
|
|
1241
1267
|
|
1242
1268
|
function getBoundingRect(tether, to) {
|
1243
1269
|
if (to === 'scrollParent') {
|
1244
|
-
to = tether.
|
1270
|
+
to = tether.scrollParents[0];
|
1245
1271
|
} else if (to === 'window') {
|
1246
1272
|
to = [pageXOffset, pageYOffset, innerWidth + pageXOffset, innerHeight + pageYOffset];
|
1247
1273
|
}
|
@@ -1369,34 +1395,32 @@ TetherBase.modules.push({
|
|
1369
1395
|
}
|
1370
1396
|
|
1371
1397
|
if (changeAttachY === 'together') {
|
1372
|
-
if (
|
1373
|
-
if (eAttachment.top === 'bottom') {
|
1398
|
+
if (tAttachment.top === 'top') {
|
1399
|
+
if (eAttachment.top === 'bottom' && top < bounds[1]) {
|
1374
1400
|
top += targetHeight;
|
1375
1401
|
tAttachment.top = 'bottom';
|
1376
1402
|
|
1377
1403
|
top += height;
|
1378
1404
|
eAttachment.top = 'top';
|
1379
|
-
} else if (eAttachment.top === 'top') {
|
1380
|
-
top
|
1405
|
+
} else if (eAttachment.top === 'top' && top + height > bounds[3] && top - (height - targetHeight) >= bounds[1]) {
|
1406
|
+
top -= height - targetHeight;
|
1381
1407
|
tAttachment.top = 'bottom';
|
1382
1408
|
|
1383
|
-
top -= height;
|
1384
1409
|
eAttachment.top = 'bottom';
|
1385
1410
|
}
|
1386
1411
|
}
|
1387
1412
|
|
1388
|
-
if (
|
1389
|
-
if (eAttachment.top === 'top') {
|
1413
|
+
if (tAttachment.top === 'bottom') {
|
1414
|
+
if (eAttachment.top === 'top' && top + height > bounds[3]) {
|
1390
1415
|
top -= targetHeight;
|
1391
1416
|
tAttachment.top = 'top';
|
1392
1417
|
|
1393
1418
|
top -= height;
|
1394
1419
|
eAttachment.top = 'bottom';
|
1395
|
-
} else if (eAttachment.top === 'bottom') {
|
1396
|
-
top
|
1420
|
+
} else if (eAttachment.top === 'bottom' && top < bounds[1] && top + (height * 2 - targetHeight) <= bounds[3]) {
|
1421
|
+
top += height - targetHeight;
|
1397
1422
|
tAttachment.top = 'top';
|
1398
1423
|
|
1399
|
-
top += height;
|
1400
1424
|
eAttachment.top = 'top';
|
1401
1425
|
}
|
1402
1426
|
}
|
@@ -1588,6 +1612,10 @@ TetherBase.modules.push({
|
|
1588
1612
|
|
1589
1613
|
if (tAttachment.top !== targetAttachment.top || tAttachment.left !== targetAttachment.left || eAttachment.top !== _this.attachment.top || eAttachment.left !== _this.attachment.left) {
|
1590
1614
|
_this.updateAttachClasses(eAttachment, tAttachment);
|
1615
|
+
_this.trigger('update', {
|
1616
|
+
attachment: eAttachment,
|
1617
|
+
targetAttachment: tAttachment
|
1618
|
+
});
|
1591
1619
|
}
|
1592
1620
|
});
|
1593
1621
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tether-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jake Gavin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -60,10 +60,14 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE.txt
|
63
65
|
- README.md
|
66
|
+
- Rakefile
|
64
67
|
- lib/tether-rails.rb
|
65
68
|
- lib/tether-rails/engine.rb
|
66
69
|
- lib/tether-rails/version.rb
|
70
|
+
- tether-rails.gemspec
|
67
71
|
- vendor/assets/javascripts/tether.js
|
68
72
|
- vendor/assets/stylesheets/tether-theme-arrows-dark.css
|
69
73
|
- vendor/assets/stylesheets/tether-theme-arrows.css
|