flashgrid 1.0.20 → 1.0.21
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/flashgrid/version.rb +1 -1
- data/vendor/assets/javascripts/affix.js +2 -4
- data/vendor/assets/javascripts/collapse.js +6 -4
- data/vendor/assets/javascripts/dropdown.js +7 -7
- data/vendor/assets/javascripts/map.js +39 -25
- data/vendor/assets/javascripts/modal.js +35 -12
- data/vendor/assets/javascripts/popover.js +1 -1
- data/vendor/assets/javascripts/tooltip.js +64 -40
- data/vendor/assets/javascripts/transition.js +4 -4
- data/vendor/assets/stylesheets/ad.css.scss +1 -1
- data/vendor/assets/stylesheets/affix.css.scss +5 -1
- data/vendor/assets/stylesheets/alert.css.scss +5 -5
- data/vendor/assets/stylesheets/breadcrumb.css.scss +1 -1
- data/vendor/assets/stylesheets/button.css.scss +58 -11
- data/vendor/assets/stylesheets/code.css.scss +3 -3
- data/vendor/assets/stylesheets/datepicker.css.scss +5 -5
- data/vendor/assets/stylesheets/dropdown.css.scss +2 -2
- data/vendor/assets/stylesheets/form.css.scss +6 -6
- data/vendor/assets/stylesheets/header.css.scss +2 -2
- data/vendor/assets/stylesheets/image.css.scss +1 -1
- data/vendor/assets/stylesheets/label_and_badge.css.scss +4 -4
- data/vendor/assets/stylesheets/map.css.scss +1 -1
- data/vendor/assets/stylesheets/modal.css.scss +3 -3
- data/vendor/assets/stylesheets/pagination.css.scss +3 -3
- data/vendor/assets/stylesheets/panel.css.scss +3 -3
- data/vendor/assets/stylesheets/placeholder.css.scss +1 -1
- data/vendor/assets/stylesheets/popover.css.scss +5 -4
- data/vendor/assets/stylesheets/progress.css.scss +2 -2
- data/vendor/assets/stylesheets/tab.css.scss +12 -12
- data/vendor/assets/stylesheets/table.css.scss +5 -5
- data/vendor/assets/stylesheets/tooltip.css.scss +2 -1
- data/vendor/assets/stylesheets/trunk.css.scss +4 -4
- data/vendor/assets/stylesheets/typography.css.scss +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f35ac3b3d7318eff440da460a22eab9dc32d8131
|
4
|
+
data.tar.gz: bc61675d2d8ad19cc7ed9f61dae83deda1150d65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbb208ad687ef4ddcf1f69a680e8a2e422c166bdae76d27436b4556ffc298d19da37c88d2e73be14dd91c3e966fca88482da33c46208843dcc9b7b9bc7b7de6b
|
7
|
+
data.tar.gz: 156afa8de6a7fd6e3e41e6cfbfed537b2c3f568014e7aa865577c1f7a666d2dd8d394eae6ad037e77c0e43e377114470f38bc104fbf13223e5249276b4c30dd5
|
data/lib/flashgrid/version.rb
CHANGED
@@ -46,8 +46,6 @@
|
|
46
46
|
var offsetTop = offset.top
|
47
47
|
var offsetBottom = offset.bottom
|
48
48
|
|
49
|
-
if (this.affixed == 'top') position.top += scrollTop
|
50
|
-
|
51
49
|
if (typeof offset != 'object') offsetBottom = offsetTop = offset
|
52
50
|
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
|
53
51
|
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
|
@@ -57,7 +55,7 @@
|
|
57
55
|
offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
|
58
56
|
|
59
57
|
if (this.affixed === affix) return
|
60
|
-
if (this.unpin) this.$element.css('top', '')
|
58
|
+
if (this.unpin != null) this.$element.css('top', '')
|
61
59
|
|
62
60
|
var affixType = 'affix' + (affix ? '-' + affix : '')
|
63
61
|
var e = $.Event(affixType + '.bs.affix')
|
@@ -75,7 +73,7 @@
|
|
75
73
|
.trigger($.Event(affixType.replace('affix', 'affixed')))
|
76
74
|
|
77
75
|
if (affix == 'bottom') {
|
78
|
-
this.$element.offset({ top:
|
76
|
+
this.$element.offset({ top: position.top })
|
79
77
|
}
|
80
78
|
}
|
81
79
|
|
@@ -47,7 +47,8 @@
|
|
47
47
|
|
48
48
|
this.transitioning = 1
|
49
49
|
|
50
|
-
var complete = function () {
|
50
|
+
var complete = function (e) {
|
51
|
+
if (e && e.target != this.$element[0]) return
|
51
52
|
this.$element
|
52
53
|
.removeClass('collapsing')
|
53
54
|
.addClass('collapse in')
|
@@ -86,7 +87,8 @@
|
|
86
87
|
|
87
88
|
this.transitioning = 1
|
88
89
|
|
89
|
-
var complete = function () {
|
90
|
+
var complete = function (e) {
|
91
|
+
if (e && e.target != this.$element[0]) return
|
90
92
|
this.transitioning = 0
|
91
93
|
this.$element
|
92
94
|
.trigger('hidden.bs.collapse')
|
@@ -139,7 +141,7 @@
|
|
139
141
|
// COLLAPSE DATA-API
|
140
142
|
// =================
|
141
143
|
|
142
|
-
$(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
|
144
|
+
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
|
143
145
|
var $this = $(this), href
|
144
146
|
var target = $this.attr('data-target')
|
145
147
|
|| e.preventDefault()
|
@@ -151,7 +153,7 @@
|
|
151
153
|
var $parent = parent && $(parent)
|
152
154
|
|
153
155
|
if (!data || !data.transitioning) {
|
154
|
-
if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
|
156
|
+
if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
|
155
157
|
$this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
|
156
158
|
}
|
157
159
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
// =========================
|
6
6
|
|
7
7
|
var backdrop = '.dropdown-backdrop'
|
8
|
-
var toggle = '[data-toggle=dropdown]'
|
8
|
+
var toggle = '[data-toggle="dropdown"]'
|
9
9
|
var Dropdown = function (element) {
|
10
10
|
$(element).on('click.bs.dropdown', this.toggle)
|
11
11
|
}
|
@@ -35,7 +35,7 @@
|
|
35
35
|
.toggleClass('open')
|
36
36
|
.trigger('shown.bs.dropdown', relatedTarget)
|
37
37
|
|
38
|
-
$this.focus
|
38
|
+
$this.trigger('focus')
|
39
39
|
}
|
40
40
|
|
41
41
|
return false
|
@@ -55,12 +55,12 @@
|
|
55
55
|
var isActive = $parent.hasClass('open')
|
56
56
|
|
57
57
|
if (!isActive || (isActive && e.keyCode == 27)) {
|
58
|
-
if (e.which == 27) $parent.find(toggle).focus
|
59
|
-
return $this.click
|
58
|
+
if (e.which == 27) $parent.find(toggle).trigger('focus')
|
59
|
+
return $this.trigger('click')
|
60
60
|
}
|
61
61
|
|
62
62
|
var desc = ' li:not(.divider):visible a'
|
63
|
-
var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
|
63
|
+
var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
|
64
64
|
|
65
65
|
if (!$items.length) return
|
66
66
|
|
@@ -70,7 +70,7 @@
|
|
70
70
|
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
|
71
71
|
if (!~index) index = 0
|
72
72
|
|
73
|
-
$items.eq(index).focus
|
73
|
+
$items.eq(index).trigger('focus')
|
74
74
|
}
|
75
75
|
|
76
76
|
function clearMenus(e) {
|
@@ -133,6 +133,6 @@
|
|
133
133
|
.on('click.bs.dropdown.data-api', clearMenus)
|
134
134
|
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
135
135
|
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
136
|
-
.on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
|
136
|
+
.on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
|
137
137
|
|
138
138
|
}(jQuery);
|
@@ -259,7 +259,7 @@ var GMaps = (function(global) {
|
|
259
259
|
context_menu_element.innerHTML = html;
|
260
260
|
|
261
261
|
var context_menu_items = context_menu_element.getElementsByTagName('a'),
|
262
|
-
context_menu_items_count = context_menu_items.length
|
262
|
+
context_menu_items_count = context_menu_items.length,
|
263
263
|
i;
|
264
264
|
|
265
265
|
for (i = 0; i < context_menu_items_count; i++) {
|
@@ -472,9 +472,12 @@ GMaps.prototype.createControl = function(options) {
|
|
472
472
|
var control = document.createElement('div');
|
473
473
|
|
474
474
|
control.style.cursor = 'pointer';
|
475
|
-
|
476
|
-
|
477
|
-
|
475
|
+
|
476
|
+
if (options.disableDefaultStyles !== true) {
|
477
|
+
control.style.fontFamily = 'Roboto, Arial, sans-serif';
|
478
|
+
control.style.fontSize = '11px';
|
479
|
+
control.style.boxShadow = 'rgba(0, 0, 0, 0.298039) 0px 1px 4px -1px';
|
480
|
+
}
|
478
481
|
|
479
482
|
for (var option in options.style) {
|
480
483
|
control.style[option] = options.style[option];
|
@@ -530,15 +533,15 @@ GMaps.prototype.createMarker = function(options) {
|
|
530
533
|
base_options = {
|
531
534
|
position: new google.maps.LatLng(options.lat, options.lng),
|
532
535
|
map: null
|
533
|
-
}
|
536
|
+
},
|
537
|
+
marker_options = extend_object(base_options, options);
|
534
538
|
|
535
|
-
delete
|
536
|
-
delete
|
537
|
-
delete
|
538
|
-
delete
|
539
|
+
delete marker_options.lat;
|
540
|
+
delete marker_options.lng;
|
541
|
+
delete marker_options.fences;
|
542
|
+
delete marker_options.outside;
|
539
543
|
|
540
|
-
var
|
541
|
-
marker = new google.maps.Marker(marker_options);
|
544
|
+
var marker = new google.maps.Marker(marker_options);
|
542
545
|
|
543
546
|
marker.fences = fences;
|
544
547
|
|
@@ -660,7 +663,7 @@ GMaps.prototype.addMarkers = function(array) {
|
|
660
663
|
|
661
664
|
GMaps.prototype.hideInfoWindows = function() {
|
662
665
|
for (var i = 0, marker; marker = this.markers[i]; i++){
|
663
|
-
if (marker.infoWindow){
|
666
|
+
if (marker.infoWindow) {
|
664
667
|
marker.infoWindow.close();
|
665
668
|
}
|
666
669
|
}
|
@@ -685,24 +688,31 @@ GMaps.prototype.removeMarker = function(marker) {
|
|
685
688
|
return marker;
|
686
689
|
};
|
687
690
|
|
688
|
-
GMaps.prototype.removeMarkers = function(collection) {
|
689
|
-
var
|
691
|
+
GMaps.prototype.removeMarkers = function (collection) {
|
692
|
+
var new_markers = [];
|
690
693
|
|
691
|
-
|
692
|
-
|
694
|
+
if (typeof collection == 'undefined') {
|
695
|
+
for (var i = 0; i < this.markers.length; i++) {
|
693
696
|
this.markers[i].setMap(null);
|
694
697
|
}
|
695
|
-
}
|
696
698
|
|
697
|
-
|
699
|
+
this.markers = new_markers;
|
700
|
+
}
|
701
|
+
else {
|
702
|
+
for (var i = 0; i < collection.length; i++) {
|
703
|
+
if (this.markers.indexOf(collection[i]) > -1) {
|
704
|
+
this.markers[i].setMap(null);
|
705
|
+
}
|
706
|
+
}
|
698
707
|
|
699
|
-
|
700
|
-
|
701
|
-
|
708
|
+
for (var i = 0; i < this.markers.length; i++) {
|
709
|
+
if (this.markers[i].getMap() != null) {
|
710
|
+
new_markers.push(this.markers[i]);
|
711
|
+
}
|
702
712
|
}
|
703
|
-
}
|
704
713
|
|
705
|
-
|
714
|
+
this.markers = new_markers;
|
715
|
+
}
|
706
716
|
};
|
707
717
|
|
708
718
|
GMaps.prototype.drawOverlay = function(options) {
|
@@ -1129,8 +1139,8 @@ GMaps.prototype.addLayer = function(layerName, options) {
|
|
1129
1139
|
case 'places':
|
1130
1140
|
this.singleLayers.places = layer = new google.maps.places.PlacesService(this.map);
|
1131
1141
|
|
1132
|
-
//search
|
1133
|
-
if (options.search || options.nearbySearch) {
|
1142
|
+
//search, nearbySearch, radarSearch callback, Both are the same
|
1143
|
+
if (options.search || options.nearbySearch || options.radarSearch) {
|
1134
1144
|
var placeSearchRequest = {
|
1135
1145
|
bounds : options.bounds || null,
|
1136
1146
|
keyword : options.keyword || null,
|
@@ -1141,6 +1151,10 @@ GMaps.prototype.addLayer = function(layerName, options) {
|
|
1141
1151
|
types : options.types || null
|
1142
1152
|
};
|
1143
1153
|
|
1154
|
+
if (options.radarSearch) {
|
1155
|
+
layer.radarSearch(placeSearchRequest, options.radarSearch);
|
1156
|
+
}
|
1157
|
+
|
1144
1158
|
if (options.search) {
|
1145
1159
|
layer.search(placeSearchRequest, options.search);
|
1146
1160
|
}
|
@@ -6,13 +6,14 @@
|
|
6
6
|
|
7
7
|
var Modal = function (element, options) {
|
8
8
|
this.options = options
|
9
|
+
this.$body = $(document.body)
|
9
10
|
this.$element = $(element)
|
10
11
|
this.$backdrop =
|
11
12
|
this.isShown = null
|
12
13
|
|
13
14
|
if (this.options.remote) {
|
14
15
|
this.$element
|
15
|
-
.find('.modal')
|
16
|
+
.find('.modal-content')
|
16
17
|
.load(this.options.remote, $.proxy(function () {
|
17
18
|
this.$element.trigger('loaded.bs.modal')
|
18
19
|
}, this))
|
@@ -26,7 +27,7 @@
|
|
26
27
|
}
|
27
28
|
|
28
29
|
Modal.prototype.toggle = function (_relatedTarget) {
|
29
|
-
return this
|
30
|
+
return this.isShown ? this.hide() : this.show(_relatedTarget)
|
30
31
|
}
|
31
32
|
|
32
33
|
Modal.prototype.show = function (_relatedTarget) {
|
@@ -39,6 +40,9 @@
|
|
39
40
|
|
40
41
|
this.isShown = true
|
41
42
|
|
43
|
+
this.$body.addClass('modal-open')
|
44
|
+
|
45
|
+
this.setScrollbar()
|
42
46
|
this.escape()
|
43
47
|
|
44
48
|
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
|
@@ -47,7 +51,7 @@
|
|
47
51
|
var transition = $.support.transition && that.$element.hasClass('fade')
|
48
52
|
|
49
53
|
if (!that.$element.parent().length) {
|
50
|
-
that.$element.appendTo(
|
54
|
+
that.$element.appendTo(that.$body) // don't move modals dom position
|
51
55
|
}
|
52
56
|
|
53
57
|
that.$element
|
@@ -69,10 +73,10 @@
|
|
69
73
|
transition ?
|
70
74
|
that.$element.find('.modal-dialog') // wait for modal to slide in
|
71
75
|
.one($.support.transition.end, function () {
|
72
|
-
that.$element.focus
|
76
|
+
that.$element.trigger('focus').trigger(e)
|
73
77
|
})
|
74
78
|
.emulateTransitionEnd(300) :
|
75
|
-
that.$element.focus
|
79
|
+
that.$element.trigger('focus').trigger(e)
|
76
80
|
})
|
77
81
|
}
|
78
82
|
|
@@ -87,6 +91,9 @@
|
|
87
91
|
|
88
92
|
this.isShown = false
|
89
93
|
|
94
|
+
this.$body.removeClass('modal-open')
|
95
|
+
|
96
|
+
this.resetScrollbar()
|
90
97
|
this.escape()
|
91
98
|
|
92
99
|
$(document).off('focusin.bs.modal')
|
@@ -108,7 +115,7 @@
|
|
108
115
|
.off('focusin.bs.modal') // guard against infinite focus loop
|
109
116
|
.on('focusin.bs.modal', $.proxy(function (e) {
|
110
117
|
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
111
|
-
this.$element.focus
|
118
|
+
this.$element.trigger('focus')
|
112
119
|
}
|
113
120
|
}, this))
|
114
121
|
}
|
@@ -144,7 +151,7 @@
|
|
144
151
|
var doAnimate = $.support.transition && animate
|
145
152
|
|
146
153
|
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
|
147
|
-
.appendTo(
|
154
|
+
.appendTo(this.$body)
|
148
155
|
|
149
156
|
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
|
150
157
|
if (e.target !== e.currentTarget) return
|
@@ -179,6 +186,26 @@
|
|
179
186
|
}
|
180
187
|
}
|
181
188
|
|
189
|
+
Modal.prototype.setScrollbar = function () {
|
190
|
+
if (document.body.clientHeight <= window.innerHeight) return
|
191
|
+
var scrollbarWidth = this.measureScrollbar()
|
192
|
+
var bodyPad = parseInt(this.$body.css('padding-right') || 0)
|
193
|
+
if (scrollbarWidth) this.$body.css('padding-right', bodyPad + scrollbarWidth)
|
194
|
+
}
|
195
|
+
|
196
|
+
Modal.prototype.resetScrollbar = function () {
|
197
|
+
this.$body.css('padding-right', '')
|
198
|
+
}
|
199
|
+
|
200
|
+
Modal.prototype.measureScrollbar = function () { // thx walsh
|
201
|
+
var scrollDiv = document.createElement('div')
|
202
|
+
scrollDiv.className = 'modal-scrollbar-measure'
|
203
|
+
this.$body.append(scrollDiv)
|
204
|
+
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
|
205
|
+
this.$body[0].removeChild(scrollDiv)
|
206
|
+
return scrollbarWidth
|
207
|
+
}
|
208
|
+
|
182
209
|
|
183
210
|
// MODAL PLUGIN DEFINITION
|
184
211
|
// =======================
|
@@ -223,12 +250,8 @@
|
|
223
250
|
$target
|
224
251
|
.modal(option, this)
|
225
252
|
.one('hide', function () {
|
226
|
-
$this.is(':visible') && $this.focus
|
253
|
+
$this.is(':visible') && $this.trigger('focus')
|
227
254
|
})
|
228
255
|
})
|
229
256
|
|
230
|
-
$(document)
|
231
|
-
.on('show.bs.modal', '.modal', function () { $(document.body).addClass('in') })
|
232
|
-
.on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('in') })
|
233
|
-
|
234
257
|
}(jQuery);
|
@@ -35,7 +35,7 @@
|
|
35
35
|
var content = this.getContent()
|
36
36
|
|
37
37
|
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
|
38
|
-
$tip.find('.popover-content')[ // we use append for html objects to maintain js events
|
38
|
+
$tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
|
39
39
|
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
|
40
40
|
](content)
|
41
41
|
|
@@ -19,19 +19,24 @@
|
|
19
19
|
animation: true,
|
20
20
|
placement: 'top',
|
21
21
|
selector: false,
|
22
|
-
template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
22
|
+
template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
23
23
|
trigger: 'hover focus',
|
24
24
|
title: '',
|
25
25
|
delay: 0,
|
26
26
|
html: false,
|
27
|
-
container: false
|
27
|
+
container: false,
|
28
|
+
viewport: {
|
29
|
+
selector: 'body',
|
30
|
+
padding: 0
|
31
|
+
}
|
28
32
|
}
|
29
33
|
|
30
34
|
Tooltip.prototype.init = function (type, element, options) {
|
31
|
-
this.enabled
|
32
|
-
this.type
|
33
|
-
this.$element
|
34
|
-
this.options
|
35
|
+
this.enabled = true
|
36
|
+
this.type = type
|
37
|
+
this.$element = $(element)
|
38
|
+
this.options = this.getOptions(options)
|
39
|
+
this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
|
35
40
|
|
36
41
|
var triggers = this.options.trigger.split(' ')
|
37
42
|
|
@@ -147,18 +152,14 @@
|
|
147
152
|
var actualHeight = $tip[0].offsetHeight
|
148
153
|
|
149
154
|
if (autoPlace) {
|
150
|
-
var $parent = this.$element.parent()
|
151
|
-
|
152
155
|
var orgPlacement = placement
|
153
|
-
var
|
154
|
-
var
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
placement == '
|
160
|
-
placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
|
161
|
-
placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
|
156
|
+
var $parent = this.$element.parent()
|
157
|
+
var parentDim = this.getPosition($parent)
|
158
|
+
|
159
|
+
placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
|
160
|
+
placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
|
161
|
+
placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
|
162
|
+
placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
|
162
163
|
placement
|
163
164
|
|
164
165
|
$tip
|
@@ -218,29 +219,20 @@
|
|
218
219
|
var actualHeight = $tip[0].offsetHeight
|
219
220
|
|
220
221
|
if (placement == 'top' && actualHeight != height) {
|
221
|
-
replace = true
|
222
222
|
offset.top = offset.top + height - actualHeight
|
223
223
|
}
|
224
224
|
|
225
|
-
|
226
|
-
var delta = 0
|
225
|
+
var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
|
227
226
|
|
228
|
-
|
229
|
-
|
230
|
-
offset.left = 0
|
227
|
+
if (delta.left) offset.left += delta.left
|
228
|
+
else offset.top += delta.top
|
231
229
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
actualHeight = $tip[0].offsetHeight
|
236
|
-
}
|
230
|
+
var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
|
231
|
+
var arrowPosition = delta.left ? 'left' : 'top'
|
232
|
+
var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
|
237
233
|
|
238
|
-
|
239
|
-
|
240
|
-
this.replaceArrow(actualHeight - height, actualHeight, 'top')
|
241
|
-
}
|
242
|
-
|
243
|
-
if (replace) $tip.offset(offset)
|
234
|
+
$tip.offset(offset)
|
235
|
+
this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
|
244
236
|
}
|
245
237
|
|
246
238
|
Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
|
@@ -293,12 +285,15 @@
|
|
293
285
|
return this.getTitle()
|
294
286
|
}
|
295
287
|
|
296
|
-
Tooltip.prototype.getPosition = function () {
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
288
|
+
Tooltip.prototype.getPosition = function ($element) {
|
289
|
+
$element = $element || this.$element
|
290
|
+
var el = $element[0]
|
291
|
+
var isBody = el.tagName == 'BODY'
|
292
|
+
return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
|
293
|
+
scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
|
294
|
+
width: isBody ? $(window).width() : $element.outerWidth(),
|
295
|
+
height: isBody ? $(window).height() : $element.outerHeight()
|
296
|
+
}, isBody ? {top: 0, left: 0} : $element.offset())
|
302
297
|
}
|
303
298
|
|
304
299
|
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
@@ -306,6 +301,35 @@
|
|
306
301
|
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
307
302
|
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
|
308
303
|
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
|
304
|
+
|
305
|
+
}
|
306
|
+
|
307
|
+
Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
|
308
|
+
var delta = { top: 0, left: 0 }
|
309
|
+
if (!this.$viewport) return delta
|
310
|
+
|
311
|
+
var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
|
312
|
+
var viewportDimensions = this.getPosition(this.$viewport)
|
313
|
+
|
314
|
+
if (/right|left/.test(placement)) {
|
315
|
+
var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
|
316
|
+
var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
|
317
|
+
if (topEdgeOffset < viewportDimensions.top) { // top overflow
|
318
|
+
delta.top = viewportDimensions.top - topEdgeOffset
|
319
|
+
} else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
|
320
|
+
delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
|
321
|
+
}
|
322
|
+
} else {
|
323
|
+
var leftEdgeOffset = pos.left - viewportPadding
|
324
|
+
var rightEdgeOffset = pos.left + viewportPadding + actualWidth
|
325
|
+
if (leftEdgeOffset < viewportDimensions.left) { // left overflow
|
326
|
+
delta.left = viewportDimensions.left - leftEdgeOffset
|
327
|
+
} else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
|
328
|
+
delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
|
329
|
+
}
|
330
|
+
}
|
331
|
+
|
332
|
+
return delta
|
309
333
|
}
|
310
334
|
|
311
335
|
Tooltip.prototype.getTitle = function () {
|