tether-rails 1.2.0 → 1.3.0
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/.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
|
+
[](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
|