mtl 1.1.7 → 1.1.8
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/app/assets/javascripts/mtl.js +1 -1
- data/app/assets/stylesheets/mtl/all.scss +4 -0
- data/lib/mtl/version.rb +2 -2
- data/package.json +1 -1
- data/vendor/assets/javascripts/materialize/cards.js +13 -3
- data/vendor/assets/javascripts/materialize/carousel.js +78 -28
- data/vendor/assets/javascripts/materialize/chips.js +27 -27
- data/vendor/assets/javascripts/materialize/collapsible.js +34 -11
- data/vendor/assets/javascripts/materialize/date_picker/picker.date.js +137 -136
- data/vendor/assets/javascripts/materialize/date_picker/picker.js +0 -1
- data/vendor/assets/javascripts/materialize/date_picker/picker.time.js +686 -0
- data/vendor/assets/javascripts/materialize/dropdown.js +19 -12
- data/vendor/assets/javascripts/materialize/forms.js +98 -72
- data/vendor/assets/javascripts/materialize/global.js +14 -1
- data/vendor/assets/javascripts/materialize/jquery.easing.1.4.js +166 -0
- data/vendor/assets/javascripts/materialize/materialbox.js +48 -44
- data/vendor/assets/javascripts/materialize/modal.js +2 -1
- data/vendor/assets/javascripts/materialize/scrollspy.js +10 -5
- data/vendor/assets/javascripts/materialize/sideNav.js +44 -14
- data/vendor/assets/javascripts/materialize/slider.js +3 -3
- data/vendor/assets/javascripts/materialize/tabs.js +17 -7
- data/vendor/assets/javascripts/materialize/tapTarget.js +187 -0
- data/vendor/assets/javascripts/materialize/transitions.js +2 -2
- data/vendor/assets/javascripts/materialize/waves.js +1 -1
- data/vendor/assets/javascripts/pdfobject.js +1 -1
- data/vendor/assets/stylesheets/materialize/_buttons.scss +11 -12
- data/vendor/assets/stylesheets/materialize/_cards.scss +3 -0
- data/vendor/assets/stylesheets/materialize/_carousel.scss +7 -1
- data/vendor/assets/stylesheets/materialize/_chips.scss +6 -1
- data/vendor/assets/stylesheets/materialize/_collapsible.scss +1 -0
- data/vendor/assets/stylesheets/materialize/_color.scss +1 -1
- data/vendor/assets/stylesheets/materialize/_dropdown.scss +3 -0
- data/vendor/assets/stylesheets/materialize/_global.scss +18 -23
- data/vendor/assets/stylesheets/materialize/_grid.scss +44 -35
- data/vendor/assets/stylesheets/materialize/_modal.scss +2 -2
- data/vendor/assets/stylesheets/materialize/_preloader.scss +3 -3
- data/vendor/assets/stylesheets/materialize/_pulse.scss +34 -0
- data/vendor/assets/stylesheets/materialize/_sideNav.scss +17 -11
- data/vendor/assets/stylesheets/materialize/_tapTarget.scss +103 -0
- data/vendor/assets/stylesheets/materialize/_variables.scss +15 -6
- data/vendor/assets/stylesheets/materialize/date_picker/_default.date.scss +48 -27
- data/vendor/assets/stylesheets/materialize/date_picker/_default.scss +10 -0
- data/vendor/assets/stylesheets/materialize/date_picker/_default.time.scss +155 -13
- data/vendor/assets/stylesheets/materialize/forms/_input-fields.scss +18 -12
- data/vendor/assets/stylesheets/materialize/forms/_range.scss +3 -2
- data/vendor/assets/stylesheets/materialize/forms/_switches.scss +30 -17
- metadata +7 -7
- data/vendor/assets/javascripts/materialize/init.js +0 -211
- data/vendor/assets/javascripts/materialize/jquery.easing.1.3.js +0 -205
- data/vendor/assets/javascripts/materialize/jquery.timeago.min.js +0 -1
- data/vendor/assets/javascripts/materialize/prism.js +0 -8
- data/vendor/assets/stylesheets/materialize/_prefixer.scss +0 -384
@@ -20,10 +20,12 @@
|
|
20
20
|
var originalHeight = 0;
|
21
21
|
var ancestorsChanged;
|
22
22
|
var ancestor;
|
23
|
+
var originInlineStyles = origin.attr('style');
|
23
24
|
origin.wrap(placeholder);
|
24
25
|
|
25
26
|
|
26
|
-
|
27
|
+
// Start click handler
|
28
|
+
origin.on('click', function() {
|
27
29
|
var placeholder = origin.parent('.material-placeholder');
|
28
30
|
var windowWidth = window.innerWidth;
|
29
31
|
var windowHeight = window.innerHeight;
|
@@ -177,25 +179,29 @@
|
|
177
179
|
); // End Velocity
|
178
180
|
}
|
179
181
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
returnToOriginal();
|
187
|
-
}
|
188
|
-
});
|
189
|
-
|
190
|
-
// Return on ESC
|
191
|
-
$(document).keyup(function(e) {
|
182
|
+
// Handle Exit triggers
|
183
|
+
$(window).on('scroll.materialbox', function() {
|
184
|
+
if (overlayActive) {
|
185
|
+
returnToOriginal();
|
186
|
+
}
|
187
|
+
});
|
192
188
|
|
193
|
-
|
189
|
+
$(window).on('resize.materialbox', function() {
|
194
190
|
if (overlayActive) {
|
195
191
|
returnToOriginal();
|
196
192
|
}
|
197
|
-
}
|
198
|
-
|
193
|
+
});
|
194
|
+
|
195
|
+
$(document).on('keyup.materialbox', function(e) {
|
196
|
+
// ESC key
|
197
|
+
if (e.keyCode === 27 &&
|
198
|
+
doneAnimating === true &&
|
199
|
+
overlayActive) {
|
200
|
+
returnToOriginal();
|
201
|
+
}
|
202
|
+
});
|
203
|
+
|
204
|
+
}); // End click handler
|
199
205
|
|
200
206
|
|
201
207
|
// This function returns the modaled image to the original spot
|
@@ -213,6 +219,10 @@
|
|
213
219
|
$('#materialbox-overlay').velocity("stop", true);
|
214
220
|
$('.materialbox-caption').velocity("stop", true);
|
215
221
|
|
222
|
+
// disable exit handlers
|
223
|
+
$(window).off('scroll.materialbox');
|
224
|
+
$(document).off('keyup.materialbox');
|
225
|
+
$(window).off('resize.materialbox');
|
216
226
|
|
217
227
|
$('#materialbox-overlay').velocity({opacity: 0}, {
|
218
228
|
duration: outDuration, // Delay prevents animation overlapping
|
@@ -234,7 +244,28 @@
|
|
234
244
|
},
|
235
245
|
{
|
236
246
|
duration: outDuration,
|
237
|
-
queue: false, easing: 'easeOutQuad'
|
247
|
+
queue: false, easing: 'easeOutQuad',
|
248
|
+
complete: function() {
|
249
|
+
placeholder.css({
|
250
|
+
height: '',
|
251
|
+
width: '',
|
252
|
+
position: '',
|
253
|
+
top: '',
|
254
|
+
left: ''
|
255
|
+
});
|
256
|
+
|
257
|
+
origin.removeAttr('style');
|
258
|
+
origin.attr('style', originInlineStyles);
|
259
|
+
|
260
|
+
// Remove class
|
261
|
+
origin.removeClass('active');
|
262
|
+
doneAnimating = true;
|
263
|
+
|
264
|
+
// Remove overflow overrides on ancestors
|
265
|
+
if (ancestorsChanged) {
|
266
|
+
ancestorsChanged.css('overflow', '');
|
267
|
+
}
|
268
|
+
}
|
238
269
|
}
|
239
270
|
);
|
240
271
|
|
@@ -243,34 +274,7 @@
|
|
243
274
|
duration: outDuration, // Delay prevents animation overlapping
|
244
275
|
queue: false, easing: 'easeOutQuad',
|
245
276
|
complete: function(){
|
246
|
-
placeholder.css({
|
247
|
-
height: '',
|
248
|
-
width: '',
|
249
|
-
position: '',
|
250
|
-
top: '',
|
251
|
-
left: ''
|
252
|
-
});
|
253
|
-
|
254
|
-
origin.css({
|
255
|
-
height: '',
|
256
|
-
top: '',
|
257
|
-
left: '',
|
258
|
-
width: '',
|
259
|
-
'max-width': '',
|
260
|
-
position: '',
|
261
|
-
'z-index': '',
|
262
|
-
'will-change': ''
|
263
|
-
});
|
264
|
-
|
265
|
-
// Remove class
|
266
|
-
origin.removeClass('active');
|
267
|
-
doneAnimating = true;
|
268
277
|
$(this).remove();
|
269
|
-
|
270
|
-
// Remove overflow overrides on ancestors
|
271
|
-
if (ancestorsChanged) {
|
272
|
-
ancestorsChanged.css('overflow', '');
|
273
|
-
}
|
274
278
|
}
|
275
279
|
});
|
276
280
|
|
@@ -83,7 +83,7 @@
|
|
83
83
|
|
84
84
|
var overlayID = _generateID();
|
85
85
|
var $overlay = $('<div class="modal-overlay"></div>');
|
86
|
-
lStack = (++_stack);
|
86
|
+
var lStack = (++_stack);
|
87
87
|
|
88
88
|
// Store a reference of the overlay
|
89
89
|
$overlay.attr('id', overlayID).css('z-index', 1000 + lStack * 2);
|
@@ -164,6 +164,7 @@
|
|
164
164
|
}); // done return
|
165
165
|
},
|
166
166
|
open : function() {
|
167
|
+
methods.init.apply( this, arguments );
|
167
168
|
$(this).trigger('openModal');
|
168
169
|
},
|
169
170
|
close : function() {
|
@@ -115,12 +115,17 @@
|
|
115
115
|
offsetRight : number -> offset from right. Default: 0
|
116
116
|
offsetBottom : number -> offset from bottom. Default: 0
|
117
117
|
offsetLeft : number -> offset from left. Default: 0
|
118
|
+
activeClass : string -> Class name to be added to the active link. Default: active
|
118
119
|
* @returns {jQuery}
|
119
120
|
*/
|
120
121
|
$.scrollSpy = function(selector, options) {
|
121
122
|
var defaults = {
|
122
123
|
throttle: 100,
|
123
|
-
scrollOffset: 200 // offset - 200 allows elements near bottom of page to scroll
|
124
|
+
scrollOffset: 200, // offset - 200 allows elements near bottom of page to scroll
|
125
|
+
activeClass: 'active',
|
126
|
+
getActiveElement: function(id) {
|
127
|
+
return 'a[href="#' + id + '"]';
|
128
|
+
}
|
124
129
|
};
|
125
130
|
options = $.extend(defaults, options);
|
126
131
|
|
@@ -167,7 +172,7 @@
|
|
167
172
|
var $this = $(this);
|
168
173
|
|
169
174
|
if (visible[0]) {
|
170
|
-
$(
|
175
|
+
$(options.getActiveElement(visible[0].attr('id'))).removeClass(options.activeClass);
|
171
176
|
if ($this.data('scrollSpy:id') < visible[0].data('scrollSpy:id')) {
|
172
177
|
visible.unshift($(this));
|
173
178
|
}
|
@@ -180,7 +185,7 @@
|
|
180
185
|
}
|
181
186
|
|
182
187
|
|
183
|
-
$(
|
188
|
+
$(options.getActiveElement(visible[0].attr('id'))).addClass(options.activeClass);
|
184
189
|
});
|
185
190
|
selector.on('scrollSpy:exit', function() {
|
186
191
|
visible = $.grep(visible, function(value) {
|
@@ -188,13 +193,13 @@
|
|
188
193
|
});
|
189
194
|
|
190
195
|
if (visible[0]) {
|
191
|
-
$(
|
196
|
+
$(options.getActiveElement(visible[0].attr('id'))).removeClass(options.activeClass);
|
192
197
|
var $this = $(this);
|
193
198
|
visible = $.grep(visible, function(value) {
|
194
199
|
return value.attr('id') != $this.attr('id');
|
195
200
|
});
|
196
201
|
if (visible[0]) { // Check if empty
|
197
|
-
$(
|
202
|
+
$(options.getActiveElement(visible[0].attr('id'))).addClass(options.activeClass);
|
198
203
|
}
|
199
204
|
}
|
200
205
|
});
|
@@ -6,7 +6,9 @@
|
|
6
6
|
menuWidth: 300,
|
7
7
|
edge: 'left',
|
8
8
|
closeOnClick: false,
|
9
|
-
draggable: true
|
9
|
+
draggable: true,
|
10
|
+
onOpen: null,
|
11
|
+
onClose: null
|
10
12
|
};
|
11
13
|
options = $.extend(defaults, options);
|
12
14
|
|
@@ -80,7 +82,9 @@
|
|
80
82
|
// if closeOnClick, then add close event for all a tags in side sideNav
|
81
83
|
if (options.closeOnClick === true) {
|
82
84
|
menu.on("click.itemclick", "a:not(.collapsible-header)", function(){
|
83
|
-
|
85
|
+
if (!(window.innerWidth > 992 && menu.hasClass('fixed'))){
|
86
|
+
removeMenu();
|
87
|
+
}
|
84
88
|
});
|
85
89
|
}
|
86
90
|
|
@@ -133,7 +137,12 @@
|
|
133
137
|
}
|
134
138
|
});
|
135
139
|
}
|
136
|
-
|
140
|
+
|
141
|
+
// Callback
|
142
|
+
if (typeof(options.onClose) === 'function') {
|
143
|
+
options.onClose.call(this, menu);
|
144
|
+
}
|
145
|
+
}
|
137
146
|
|
138
147
|
|
139
148
|
|
@@ -150,7 +159,7 @@
|
|
150
159
|
|
151
160
|
$dragTarget.hammer({
|
152
161
|
prevent_default: false
|
153
|
-
}).
|
162
|
+
}).on('pan', function(e) {
|
154
163
|
|
155
164
|
if (e.gesture.pointerType == "touch") {
|
156
165
|
|
@@ -159,6 +168,11 @@
|
|
159
168
|
var y = e.gesture.center.y;
|
160
169
|
var velocityX = e.gesture.velocityX;
|
161
170
|
|
171
|
+
// Vertical scroll bugfix
|
172
|
+
if (x === 0 && y === 0) {
|
173
|
+
return;
|
174
|
+
}
|
175
|
+
|
162
176
|
// Disable Scrolling
|
163
177
|
var $body = $('body');
|
164
178
|
var $overlay = $('#sidenav-overlay');
|
@@ -172,6 +186,12 @@
|
|
172
186
|
$overlay.css('opacity', 0).click( function(){
|
173
187
|
removeMenu();
|
174
188
|
});
|
189
|
+
|
190
|
+
// Run 'onOpen' when sidenav is opened via touch/swipe if applicable
|
191
|
+
if (typeof(options.onOpen) === 'function') {
|
192
|
+
options.onOpen.call(this, menu);
|
193
|
+
}
|
194
|
+
|
175
195
|
$('body').append($overlay);
|
176
196
|
}
|
177
197
|
|
@@ -218,10 +238,10 @@
|
|
218
238
|
}
|
219
239
|
}
|
220
240
|
|
221
|
-
}).
|
241
|
+
}).on('panend', function(e) {
|
222
242
|
|
223
243
|
if (e.gesture.pointerType == "touch") {
|
224
|
-
var $overlay = $('
|
244
|
+
var $overlay = $('#sidenav-overlay');
|
225
245
|
var velocityX = e.gesture.velocityX;
|
226
246
|
var x = e.gesture.center.x;
|
227
247
|
var leftPos = x - options.menuWidth;
|
@@ -256,6 +276,11 @@
|
|
256
276
|
menu.velocity({'translateX': [-1 * options.menuWidth - 10, leftPos]}, {duration: 200, queue: false, easing: 'easeOutQuad'});
|
257
277
|
$overlay.velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad',
|
258
278
|
complete: function () {
|
279
|
+
// Run 'onClose' when sidenav is closed via touch/swipe if applicable
|
280
|
+
if (typeof(options.onClose) === 'function') {
|
281
|
+
options.onClose.call(this, menu);
|
282
|
+
}
|
283
|
+
|
259
284
|
$(this).remove();
|
260
285
|
}});
|
261
286
|
$dragTarget.css({width: '10px', right: '', left: 0});
|
@@ -330,14 +355,19 @@
|
|
330
355
|
$(this).remove();
|
331
356
|
} });
|
332
357
|
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
358
|
+
});
|
359
|
+
$('body').append($overlay);
|
360
|
+
$overlay.velocity({opacity: 1}, {duration: 300, queue: false, easing: 'easeOutQuad',
|
361
|
+
complete: function () {
|
362
|
+
menuOut = true;
|
363
|
+
panning = false;
|
364
|
+
}
|
365
|
+
});
|
366
|
+
|
367
|
+
// Callback
|
368
|
+
if (typeof(options.onOpen) === 'function') {
|
369
|
+
options.onOpen.call(this, menu);
|
370
|
+
}
|
341
371
|
}
|
342
372
|
|
343
373
|
return false;
|
@@ -96,7 +96,7 @@
|
|
96
96
|
$slides.find('img').each(function () {
|
97
97
|
var placeholderBase64 = 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
|
98
98
|
if ($(this).attr('src') !== placeholderBase64) {
|
99
|
-
$(this).css('background-image', 'url(' + $(this).attr('src') + ')' );
|
99
|
+
$(this).css('background-image', 'url("' + $(this).attr('src') + '")' );
|
100
100
|
$(this).attr('src', placeholderBase64);
|
101
101
|
}
|
102
102
|
});
|
@@ -171,7 +171,7 @@
|
|
171
171
|
|
172
172
|
$this.hammer({
|
173
173
|
prevent_default: false
|
174
|
-
}).
|
174
|
+
}).on('pan', function(e) {
|
175
175
|
if (e.gesture.pointerType === "touch") {
|
176
176
|
|
177
177
|
// reset interval
|
@@ -219,7 +219,7 @@
|
|
219
219
|
|
220
220
|
}
|
221
221
|
|
222
|
-
}).
|
222
|
+
}).on('panend', function(e) {
|
223
223
|
if (e.gesture.pointerType === "touch") {
|
224
224
|
|
225
225
|
$curr_slide = $slider.find('.active');
|
@@ -8,8 +8,11 @@
|
|
8
8
|
responsiveThreshold: Infinity, // breakpoint for swipeable
|
9
9
|
};
|
10
10
|
options = $.extend(defaults, options);
|
11
|
+
var namespace = Materialize.objectSelectorString($(this));
|
11
12
|
|
12
|
-
return this.each(function() {
|
13
|
+
return this.each(function(i) {
|
14
|
+
|
15
|
+
var uniqueNamespace = namespace+i;
|
13
16
|
|
14
17
|
// For each set of tabs, we want to keep track of
|
15
18
|
// which tab is active and its associated content
|
@@ -31,13 +34,13 @@
|
|
31
34
|
// Finds right attribute for indicator based on active tab.
|
32
35
|
// el: jQuery Object
|
33
36
|
var calcRightPos = function(el) {
|
34
|
-
return $tabs_width - el.position().left - el.outerWidth() - $this.scrollLeft();
|
37
|
+
return Math.ceil($tabs_width - el.position().left - el.outerWidth() - $this.scrollLeft());
|
35
38
|
};
|
36
39
|
|
37
40
|
// Finds left attribute for indicator based on active tab.
|
38
41
|
// el: jQuery Object
|
39
42
|
var calcLeftPos = function(el) {
|
40
|
-
return el.position().left + $this.scrollLeft();
|
43
|
+
return Math.floor(el.position().left + $this.scrollLeft());
|
41
44
|
};
|
42
45
|
|
43
46
|
// Animates Indicator to active tab.
|
@@ -85,7 +88,7 @@
|
|
85
88
|
|
86
89
|
// append indicator then set indicator width to tab width
|
87
90
|
if (!$this.find('.indicator').length) {
|
88
|
-
$this.append('<
|
91
|
+
$this.append('<li class="indicator"></li>');
|
89
92
|
}
|
90
93
|
$indicator = $this.find('.indicator');
|
91
94
|
|
@@ -100,7 +103,7 @@
|
|
100
103
|
$indicator.css({"left": calcLeftPos($active) });
|
101
104
|
}, 0);
|
102
105
|
}
|
103
|
-
$(window).resize(function () {
|
106
|
+
$(window).off('resize.tabs-'+uniqueNamespace).on('resize.tabs-'+uniqueNamespace, function () {
|
104
107
|
$tabs_width = $this.width();
|
105
108
|
$tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length;
|
106
109
|
if (index < 0) {
|
@@ -131,6 +134,9 @@
|
|
131
134
|
index = $tabs_wrapper.index(item);
|
132
135
|
$active = $links.eq(index);
|
133
136
|
animateIndicator(prev_index);
|
137
|
+
if (typeof(options.onShow) === "function") {
|
138
|
+
options.onShow.call($this[0], $content);
|
139
|
+
}
|
134
140
|
}
|
135
141
|
},
|
136
142
|
});
|
@@ -143,7 +149,7 @@
|
|
143
149
|
|
144
150
|
|
145
151
|
// Bind the click event handler
|
146
|
-
$this.on('click', 'a', function(e) {
|
152
|
+
$this.off('click.tabs').on('click.tabs', 'a', function(e) {
|
147
153
|
if ($(this).parent().hasClass('disabled')) {
|
148
154
|
e.preventDefault();
|
149
155
|
return;
|
@@ -181,7 +187,11 @@
|
|
181
187
|
// Swap content
|
182
188
|
if (options.swipeable) {
|
183
189
|
if ($tabs_content.length) {
|
184
|
-
$tabs_content.carousel('set', index)
|
190
|
+
$tabs_content.carousel('set', index, function() {
|
191
|
+
if (typeof(options.onShow) === "function") {
|
192
|
+
options.onShow.call($this[0], $content);
|
193
|
+
}
|
194
|
+
});
|
185
195
|
}
|
186
196
|
} else {
|
187
197
|
if ($content !== undefined) {
|
@@ -0,0 +1,187 @@
|
|
1
|
+
(function ($) {
|
2
|
+
|
3
|
+
var methods = {
|
4
|
+
init: function (options) {
|
5
|
+
return this.each(function() {
|
6
|
+
var origin = $('#'+$(this).attr('data-activates'));
|
7
|
+
var screen = $('body');
|
8
|
+
|
9
|
+
// Creating tap target
|
10
|
+
var tapTargetEl = $(this);
|
11
|
+
var tapTargetWrapper = tapTargetEl.parent('.tap-target-wrapper');
|
12
|
+
var tapTargetWave = tapTargetWrapper.find('.tap-target-wave');
|
13
|
+
var tapTargetOriginEl = tapTargetWrapper.find('.tap-target-origin');
|
14
|
+
var tapTargetContentEl = tapTargetEl.find('.tap-target-content');
|
15
|
+
|
16
|
+
// Creating wrapper
|
17
|
+
if (!tapTargetWrapper.length) {
|
18
|
+
tapTargetWrapper = tapTargetEl.wrap($('<div class="tap-target-wrapper"></div>')).parent();
|
19
|
+
}
|
20
|
+
|
21
|
+
// Creating content
|
22
|
+
if (!tapTargetContentEl.length) {
|
23
|
+
tapTargetContentEl = $('<div class="tap-target-content"></div>');
|
24
|
+
tapTargetEl.append(tapTargetContentEl);
|
25
|
+
}
|
26
|
+
|
27
|
+
// Creating foreground wave
|
28
|
+
if (!tapTargetWave.length) {
|
29
|
+
tapTargetWave = $('<div class="tap-target-wave"></div>');
|
30
|
+
|
31
|
+
// Creating origin
|
32
|
+
if (!tapTargetOriginEl.length) {
|
33
|
+
tapTargetOriginEl = origin.clone(true, true);
|
34
|
+
tapTargetOriginEl.addClass('tap-target-origin');
|
35
|
+
tapTargetOriginEl.removeAttr('id');
|
36
|
+
tapTargetOriginEl.removeAttr('style');
|
37
|
+
tapTargetWave.append(tapTargetOriginEl);
|
38
|
+
}
|
39
|
+
|
40
|
+
tapTargetWrapper.append(tapTargetWave);
|
41
|
+
}
|
42
|
+
|
43
|
+
// Open
|
44
|
+
var openTapTarget = function() {
|
45
|
+
if (tapTargetWrapper.is('.open')) {
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
|
49
|
+
// Adding open class
|
50
|
+
tapTargetWrapper.addClass('open');
|
51
|
+
|
52
|
+
setTimeout(function() {
|
53
|
+
tapTargetOriginEl.off('click.tapTarget').on('click.tapTarget', function(e) {
|
54
|
+
closeTapTarget();
|
55
|
+
tapTargetOriginEl.off('click.tapTarget');
|
56
|
+
});
|
57
|
+
|
58
|
+
$(document).off('click.tapTarget').on('click.tapTarget', function(e) {
|
59
|
+
closeTapTarget();
|
60
|
+
$(document).off('click.tapTarget');
|
61
|
+
});
|
62
|
+
|
63
|
+
var throttledCalc = Materialize.throttle(function() {
|
64
|
+
calculateTapTarget();
|
65
|
+
}, 200);
|
66
|
+
$(window).off('resize.tapTarget').on('resize.tapTarget', throttledCalc);
|
67
|
+
}, 0);
|
68
|
+
};
|
69
|
+
|
70
|
+
// Close
|
71
|
+
var closeTapTarget = function(){
|
72
|
+
if (!tapTargetWrapper.is('.open')) {
|
73
|
+
return;
|
74
|
+
}
|
75
|
+
|
76
|
+
tapTargetWrapper.removeClass('open');
|
77
|
+
tapTargetOriginEl.off('click.tapTarget')
|
78
|
+
$(document).off('click.tapTarget');
|
79
|
+
$(window).off('resize.tapTarget');
|
80
|
+
};
|
81
|
+
|
82
|
+
// Pre calculate
|
83
|
+
var calculateTapTarget = function() {
|
84
|
+
// Element or parent is fixed position?
|
85
|
+
var isFixed = origin.css('position') === 'fixed';
|
86
|
+
if (!isFixed) {
|
87
|
+
var parents = origin.parents();
|
88
|
+
for(var i = 0; i < parents.length; i++) {
|
89
|
+
isFixed = $(parents[i]).css('position') == 'fixed';
|
90
|
+
if (isFixed) {
|
91
|
+
break;
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
// Calculating origin
|
97
|
+
var originWidth = origin.outerWidth();
|
98
|
+
var originHeight = origin.outerHeight();
|
99
|
+
var originTop = isFixed ? origin.offset().top - $(document).scrollTop() : origin.offset().top;
|
100
|
+
var originLeft = isFixed ? origin.offset().left - $(document).scrollLeft() : origin.offset().left;
|
101
|
+
|
102
|
+
// Calculating screen
|
103
|
+
var windowWidth = $(window).width();
|
104
|
+
var windowHeight = $(window).height();
|
105
|
+
var centerX = windowWidth / 2;
|
106
|
+
var centerY = windowHeight / 2;
|
107
|
+
var isLeft = originLeft <= centerX;
|
108
|
+
var isRight = originLeft > centerX;
|
109
|
+
var isTop = originTop <= centerY;
|
110
|
+
var isBottom = originTop > centerY;
|
111
|
+
var isCenterX = originLeft >= windowWidth*0.25 && originLeft <= windowWidth*0.75;
|
112
|
+
var isCenterY = originTop >= windowHeight*0.25 && originTop <= windowHeight*0.75;
|
113
|
+
|
114
|
+
// Calculating tap target
|
115
|
+
var tapTargetWidth = tapTargetEl.outerWidth();
|
116
|
+
var tapTargetHeight = tapTargetEl.outerHeight();
|
117
|
+
var tapTargetTop = originTop + originHeight/2 - tapTargetHeight/2;
|
118
|
+
var tapTargetLeft = originLeft + originWidth/2 - tapTargetWidth/2;
|
119
|
+
var tapTargetPosition = isFixed ? 'fixed' : 'absolute';
|
120
|
+
|
121
|
+
// Calculating content
|
122
|
+
var tapTargetTextWidth = isCenterX ? tapTargetWidth : tapTargetWidth/2 + originWidth;
|
123
|
+
var tapTargetTextHeight = tapTargetHeight/2;
|
124
|
+
var tapTargetTextTop = isTop ? tapTargetHeight/2 : 0;
|
125
|
+
var tapTargetTextBottom = 0;
|
126
|
+
var tapTargetTextLeft = isLeft && !isCenterX ? tapTargetWidth/2 - originWidth : 0;
|
127
|
+
var tapTargetTextRight = 0;
|
128
|
+
var tapTargetTextPadding = originWidth;
|
129
|
+
var tapTargetTextAlign = isBottom ? 'bottom' : 'top';
|
130
|
+
|
131
|
+
// Calculating wave
|
132
|
+
var tapTargetWaveWidth = originWidth > originHeight ? originWidth*2 : originWidth*2;
|
133
|
+
var tapTargetWaveHeight = tapTargetWaveWidth;
|
134
|
+
var tapTargetWaveTop = tapTargetHeight/2 - tapTargetWaveHeight/2;
|
135
|
+
var tapTargetWaveLeft = tapTargetWidth/2 - tapTargetWaveWidth/2;
|
136
|
+
|
137
|
+
// Setting tap target
|
138
|
+
var tapTargetWrapperCssObj = {};
|
139
|
+
tapTargetWrapperCssObj.top = isTop ? tapTargetTop : '';
|
140
|
+
tapTargetWrapperCssObj.right = isRight ? windowWidth - tapTargetLeft - tapTargetWidth : '';
|
141
|
+
tapTargetWrapperCssObj.bottom = isBottom ? windowHeight - tapTargetTop - tapTargetHeight : '';
|
142
|
+
tapTargetWrapperCssObj.left = isLeft ? tapTargetLeft : '';
|
143
|
+
tapTargetWrapperCssObj.position = tapTargetPosition;
|
144
|
+
tapTargetWrapper.css(tapTargetWrapperCssObj);
|
145
|
+
|
146
|
+
// Setting content
|
147
|
+
tapTargetContentEl.css({
|
148
|
+
width: tapTargetTextWidth,
|
149
|
+
height: tapTargetTextHeight,
|
150
|
+
top: tapTargetTextTop,
|
151
|
+
right: tapTargetTextRight,
|
152
|
+
bottom: tapTargetTextBottom,
|
153
|
+
left: tapTargetTextLeft,
|
154
|
+
padding: tapTargetTextPadding,
|
155
|
+
verticalAlign: tapTargetTextAlign
|
156
|
+
});
|
157
|
+
|
158
|
+
// Setting wave
|
159
|
+
tapTargetWave.css({
|
160
|
+
top: tapTargetWaveTop,
|
161
|
+
left: tapTargetWaveLeft,
|
162
|
+
width: tapTargetWaveWidth,
|
163
|
+
height: tapTargetWaveHeight
|
164
|
+
});
|
165
|
+
}
|
166
|
+
|
167
|
+
if (options == 'open') {
|
168
|
+
calculateTapTarget();
|
169
|
+
openTapTarget();
|
170
|
+
}
|
171
|
+
|
172
|
+
if (options == 'close')
|
173
|
+
closeTapTarget();
|
174
|
+
});
|
175
|
+
},
|
176
|
+
open: function() {},
|
177
|
+
close: function() {}
|
178
|
+
};
|
179
|
+
|
180
|
+
$.fn.tapTarget = function(methodOrOptions) {
|
181
|
+
if (methods[methodOrOptions] || typeof methodOrOptions === 'object')
|
182
|
+
return methods.init.apply( this, arguments );
|
183
|
+
|
184
|
+
$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tap-target' );
|
185
|
+
};
|
186
|
+
|
187
|
+
}( jQuery ));
|
@@ -86,7 +86,7 @@
|
|
86
86
|
$('.dismissable').each(function() {
|
87
87
|
$(this).hammer({
|
88
88
|
prevent_default: false
|
89
|
-
}).
|
89
|
+
}).on('pan', function(e) {
|
90
90
|
if (e.gesture.pointerType === "touch") {
|
91
91
|
var $this = $(this);
|
92
92
|
var direction = e.gesture.direction;
|
@@ -106,7 +106,7 @@
|
|
106
106
|
swipeRight = true;
|
107
107
|
}
|
108
108
|
}
|
109
|
-
}).
|
109
|
+
}).on('panend', function(e) {
|
110
110
|
// Reset if collection is moved back into original position
|
111
111
|
if (Math.abs(e.gesture.deltaX) < ($(this).innerWidth() / 2)) {
|
112
112
|
swipeRight = false;
|
@@ -262,7 +262,7 @@
|
|
262
262
|
if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) {
|
263
263
|
element = target;
|
264
264
|
break;
|
265
|
-
} else if (target.
|
265
|
+
} else if (target.className.indexOf('waves-effect') !== -1) {
|
266
266
|
element = target;
|
267
267
|
break;
|
268
268
|
}
|