dr-jekylls-materials 0.1.4 → 0.1.5

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -0
  3. data/assets/css/materialize.scss +42 -0
  4. data/assets/css/site.css +10 -0
  5. data/assets/fonts/roboto/Roboto-Bold.eot +0 -0
  6. data/assets/fonts/roboto/Roboto-Bold.ttf +0 -0
  7. data/assets/fonts/roboto/Roboto-Bold.woff +0 -0
  8. data/assets/fonts/roboto/Roboto-Bold.woff2 +0 -0
  9. data/assets/fonts/roboto/Roboto-Light.eot +0 -0
  10. data/assets/fonts/roboto/Roboto-Light.ttf +0 -0
  11. data/assets/fonts/roboto/Roboto-Light.woff +0 -0
  12. data/assets/fonts/roboto/Roboto-Light.woff2 +0 -0
  13. data/assets/fonts/roboto/Roboto-Medium.eot +0 -0
  14. data/assets/fonts/roboto/Roboto-Medium.ttf +0 -0
  15. data/assets/fonts/roboto/Roboto-Medium.woff +0 -0
  16. data/assets/fonts/roboto/Roboto-Medium.woff2 +0 -0
  17. data/assets/fonts/roboto/Roboto-Regular.eot +0 -0
  18. data/assets/fonts/roboto/Roboto-Regular.ttf +0 -0
  19. data/assets/fonts/roboto/Roboto-Regular.woff +0 -0
  20. data/assets/fonts/roboto/Roboto-Regular.woff2 +0 -0
  21. data/assets/fonts/roboto/Roboto-Thin.eot +0 -0
  22. data/assets/fonts/roboto/Roboto-Thin.ttf +0 -0
  23. data/assets/fonts/roboto/Roboto-Thin.woff +0 -0
  24. data/assets/fonts/roboto/Roboto-Thin.woff2 +0 -0
  25. data/assets/js/animation.js +9 -0
  26. data/assets/js/bin/materialize.js +7778 -0
  27. data/assets/js/bin/materialize.min.js +10 -0
  28. data/assets/js/buttons.js +267 -0
  29. data/assets/js/cards.js +26 -0
  30. data/assets/js/carousel.js +454 -0
  31. data/assets/js/character_counter.js +72 -0
  32. data/assets/js/chips.js +289 -0
  33. data/assets/js/collapsible.js +160 -0
  34. data/assets/js/date_picker/picker.date.js +1430 -0
  35. data/assets/js/date_picker/picker.js +1123 -0
  36. data/assets/js/dropdown.js +265 -0
  37. data/assets/js/forms.js +682 -0
  38. data/assets/js/global.js +98 -0
  39. data/assets/js/hammer.min.js +1 -0
  40. data/assets/js/initial.js +11 -0
  41. data/assets/js/jquery.easing.1.3.js +205 -0
  42. data/assets/js/jquery.hammer.js +33 -0
  43. data/assets/js/materialbox.js +269 -0
  44. data/assets/js/materialize-readies.js +14 -0
  45. data/assets/js/materialize.js +7779 -0
  46. data/assets/js/materialize.min.js +10 -0
  47. data/assets/js/modal.js +184 -0
  48. data/assets/js/parallax.js +58 -0
  49. data/assets/js/pushpin.js +71 -0
  50. data/assets/js/scrollFire.js +48 -0
  51. data/assets/js/scrollspy.js +284 -0
  52. data/assets/js/sideNav.js +370 -0
  53. data/assets/js/slider.js +321 -0
  54. data/assets/js/tabs.js +164 -0
  55. data/assets/js/toasts.js +137 -0
  56. data/assets/js/tooltip.js +236 -0
  57. data/assets/js/transitions.js +169 -0
  58. data/assets/js/velocity.min.js +5 -0
  59. data/assets/js/waves.js +338 -0
  60. data/assets/materialize-LICENSE +21 -0
  61. data/assets/materialize-README.md +48 -0
  62. data/assets/site.css +2 -0
  63. metadata +61 -1
@@ -0,0 +1,164 @@
1
+ (function ($) {
2
+
3
+ var methods = {
4
+ init : function(options) {
5
+ var defaults = {
6
+ onShow: null
7
+ };
8
+ options = $.extend(defaults, options);
9
+
10
+ return this.each(function() {
11
+
12
+ // For each set of tabs, we want to keep track of
13
+ // which tab is active and its associated content
14
+ var $this = $(this),
15
+ window_width = $(window).width();
16
+
17
+ var $active, $content, $links = $this.find('li.tab a'),
18
+ $tabs_width = $this.width(),
19
+ $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length,
20
+ $index = 0;
21
+
22
+ // Finds right attribute for indicator based on active tab.
23
+ // el: jQuery Object
24
+ var calcRightPos = function(el) {
25
+ return $tabs_width - el.position().left - el.outerWidth() - $this.scrollLeft();
26
+ };
27
+
28
+ // Finds left attribute for indicator based on active tab.
29
+ // el: jQuery Object
30
+ var calcLeftPos = function(el) {
31
+ return el.position().left + $this.scrollLeft();
32
+ };
33
+
34
+ // If the location.hash matches one of the links, use that as the active tab.
35
+ $active = $($links.filter('[href="'+location.hash+'"]'));
36
+
37
+ // If no match is found, use the first link or any with class 'active' as the initial active tab.
38
+ if ($active.length === 0) {
39
+ $active = $(this).find('li.tab a.active').first();
40
+ }
41
+ if ($active.length === 0) {
42
+ $active = $(this).find('li.tab a').first();
43
+ }
44
+
45
+ $active.addClass('active');
46
+ $index = $links.index($active);
47
+ if ($index < 0) {
48
+ $index = 0;
49
+ }
50
+
51
+ if ($active[0] !== undefined) {
52
+ $content = $($active[0].hash);
53
+ }
54
+
55
+ // append indicator then set indicator width to tab width
56
+ $this.append('<div class="indicator"></div>');
57
+ var $indicator = $this.find('.indicator');
58
+ if ($this.is(":visible")) {
59
+ // $indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)});
60
+ // $indicator.css({"left": $index * $tab_width});
61
+ setTimeout(function() {
62
+ $indicator.css({"right": calcRightPos($active) });
63
+ $indicator.css({"left": calcLeftPos($active) });
64
+ }, 0);
65
+ }
66
+ $(window).resize(function () {
67
+ $tabs_width = $this.width();
68
+ $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length;
69
+ if ($index < 0) {
70
+ $index = 0;
71
+ }
72
+ if ($tab_width !== 0 && $tabs_width !== 0) {
73
+ $indicator.css({"right": calcRightPos($active) });
74
+ $indicator.css({"left": calcLeftPos($active) });
75
+ }
76
+ });
77
+
78
+ // Hide the remaining content
79
+ $links.not($active).each(function () {
80
+ $(Materialize.escapeHash(this.hash)).hide();
81
+ });
82
+
83
+
84
+ // Bind the click event handler
85
+ $this.on('click', 'a', function(e) {
86
+ if ($(this).parent().hasClass('disabled')) {
87
+ e.preventDefault();
88
+ return;
89
+ }
90
+
91
+ // Act as regular link if target attribute is specified.
92
+ if (!!$(this).attr("target")) {
93
+ return;
94
+ }
95
+
96
+ $tabs_width = $this.width();
97
+ $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length;
98
+
99
+ // Make the old tab inactive.
100
+ $active.removeClass('active');
101
+ if ($content !== undefined) {
102
+ $content.hide();
103
+ }
104
+
105
+ // Update the variables with the new link and content
106
+ $active = $(this);
107
+ $content = $(Materialize.escapeHash(this.hash));
108
+ $links = $this.find('li.tab a');
109
+ var activeRect = $active.position();
110
+
111
+ // Make the tab active.
112
+ $active.addClass('active');
113
+ var $prev_index = $index;
114
+ $index = $links.index($(this));
115
+ if ($index < 0) {
116
+ $index = 0;
117
+ }
118
+ // Change url to current tab
119
+ // window.location.hash = $active.attr('href');
120
+
121
+ if ($content !== undefined) {
122
+ $content.show();
123
+ if (typeof(options.onShow) === "function") {
124
+ options.onShow.call(this, $content);
125
+ }
126
+ }
127
+
128
+ // Update indicator
129
+
130
+ if (($index - $prev_index) >= 0) {
131
+ $indicator.velocity({"right": calcRightPos($active) }, { duration: 300, queue: false, easing: 'easeOutQuad'});
132
+ $indicator.velocity({"left": calcLeftPos($active) }, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90});
133
+
134
+ } else {
135
+ $indicator.velocity({"left": calcLeftPos($active) }, { duration: 300, queue: false, easing: 'easeOutQuad'});
136
+ $indicator.velocity({"right": calcRightPos($active) }, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90});
137
+ }
138
+
139
+ // Prevent the anchor's default click action
140
+ e.preventDefault();
141
+ });
142
+ });
143
+
144
+ },
145
+ select_tab : function( id ) {
146
+ this.find('a[href="#' + id + '"]').trigger('click');
147
+ }
148
+ };
149
+
150
+ $.fn.tabs = function(methodOrOptions) {
151
+ if ( methods[methodOrOptions] ) {
152
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
153
+ } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
154
+ // Default to "init"
155
+ return methods.init.apply( this, arguments );
156
+ } else {
157
+ $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tabs' );
158
+ }
159
+ };
160
+
161
+ $(document).ready(function(){
162
+ $('ul.tabs').tabs();
163
+ });
164
+ }( jQuery ));
@@ -0,0 +1,137 @@
1
+ Materialize.toast = function (message, displayLength, className, completeCallback) {
2
+ className = className || "";
3
+
4
+ var container = document.getElementById('toast-container');
5
+
6
+ // Create toast container if it does not exist
7
+ if (container === null) {
8
+ // create notification container
9
+ container = document.createElement('div');
10
+ container.id = 'toast-container';
11
+ document.body.appendChild(container);
12
+ }
13
+
14
+ // Select and append toast
15
+ var newToast = createToast(message);
16
+
17
+ // only append toast if message is not undefined
18
+ if(message){
19
+ container.appendChild(newToast);
20
+ }
21
+
22
+ newToast.style.top = '35px';
23
+ newToast.style.opacity = 0;
24
+
25
+ // Animate toast in
26
+ Vel(newToast, { "top" : "0px", opacity: 1 }, {duration: 300,
27
+ easing: 'easeOutCubic',
28
+ queue: false});
29
+
30
+ // Allows timer to be pause while being panned
31
+ var timeLeft = displayLength;
32
+ var counterInterval;
33
+ if (timeLeft != null) {
34
+ counterInterval = setInterval (function(){
35
+ if (newToast.parentNode === null)
36
+ window.clearInterval(counterInterval);
37
+
38
+ // If toast is not being dragged, decrease its time remaining
39
+ if (!newToast.classList.contains('panning')) {
40
+ timeLeft -= 20;
41
+ }
42
+
43
+ if (timeLeft <= 0) {
44
+ // Animate toast out
45
+ Vel(newToast, {"opacity": 0, marginTop: '-40px'}, { duration: 375,
46
+ easing: 'easeOutExpo',
47
+ queue: false,
48
+ complete: function(){
49
+ // Call the optional callback
50
+ if(typeof(completeCallback) === "function")
51
+ completeCallback();
52
+ // Remove toast after it times out
53
+ this[0].parentNode.removeChild(this[0]);
54
+ }
55
+ });
56
+ window.clearInterval(counterInterval);
57
+ }
58
+ }, 20);
59
+ }
60
+
61
+
62
+
63
+ function createToast(html) {
64
+
65
+ // Create toast
66
+ var toast = document.createElement('div');
67
+ toast.classList.add('toast');
68
+ if (className) {
69
+ var classes = className.split(' ');
70
+
71
+ for (var i = 0, count = classes.length; i < count; i++) {
72
+ toast.classList.add(classes[i]);
73
+ }
74
+ }
75
+ // If type of parameter is HTML Element
76
+ if ( typeof HTMLElement === "object" ? html instanceof HTMLElement : html && typeof html === "object" && html !== null && html.nodeType === 1 && typeof html.nodeName==="string"
77
+ ) {
78
+ toast.appendChild(html);
79
+ }
80
+ else if (html instanceof jQuery) {
81
+ // Check if it is jQuery object
82
+ toast.appendChild(html[0]);
83
+ }
84
+ else {
85
+ // Insert as text;
86
+ toast.innerHTML = html;
87
+ }
88
+ // Bind hammer
89
+ var hammerHandler = new Hammer(toast, {prevent_default: false});
90
+ hammerHandler.on('pan', function(e) {
91
+ var deltaX = e.deltaX;
92
+ var activationDistance = 80;
93
+
94
+ // Change toast state
95
+ if (!toast.classList.contains('panning')){
96
+ toast.classList.add('panning');
97
+ }
98
+
99
+ var opacityPercent = 1-Math.abs(deltaX / activationDistance);
100
+ if (opacityPercent < 0)
101
+ opacityPercent = 0;
102
+
103
+ Vel(toast, {left: deltaX, opacity: opacityPercent }, {duration: 50, queue: false, easing: 'easeOutQuad'});
104
+
105
+ });
106
+
107
+ hammerHandler.on('panend', function(e) {
108
+ var deltaX = e.deltaX;
109
+ var activationDistance = 80;
110
+
111
+ // If toast dragged past activation point
112
+ if (Math.abs(deltaX) > activationDistance) {
113
+ Vel(toast, {marginTop: '-40px'}, { duration: 375,
114
+ easing: 'easeOutExpo',
115
+ queue: false,
116
+ complete: function(){
117
+ if(typeof(completeCallback) === "function") {
118
+ completeCallback();
119
+ }
120
+ toast.parentNode.removeChild(toast);
121
+ }
122
+ });
123
+
124
+ } else {
125
+ toast.classList.remove('panning');
126
+ // Put toast back into original position
127
+ Vel(toast, { left: 0, opacity: 1 }, { duration: 300,
128
+ easing: 'easeOutExpo',
129
+ queue: false
130
+ });
131
+
132
+ }
133
+ });
134
+
135
+ return toast;
136
+ }
137
+ };
@@ -0,0 +1,236 @@
1
+ (function ($) {
2
+ $.fn.tooltip = function (options) {
3
+ var timeout = null,
4
+ margin = 5;
5
+
6
+ // Defaults
7
+ var defaults = {
8
+ delay: 350,
9
+ tooltip: '',
10
+ position: 'bottom',
11
+ html: false
12
+ };
13
+
14
+ // Remove tooltip from the activator
15
+ if (options === "remove") {
16
+ this.each(function() {
17
+ $('#' + $(this).attr('data-tooltip-id')).remove();
18
+ $(this).off('mouseenter.tooltip mouseleave.tooltip');
19
+ });
20
+ return false;
21
+ }
22
+
23
+ options = $.extend(defaults, options);
24
+
25
+ return this.each(function() {
26
+ var tooltipId = Materialize.guid();
27
+ var origin = $(this);
28
+
29
+ // Destroy old tooltip
30
+ if (origin.attr('data-tooltip-id')) {
31
+ $('#' + origin.attr('data-tooltip-id')).remove();
32
+ }
33
+
34
+ origin.attr('data-tooltip-id', tooltipId);
35
+
36
+ // Get attributes.
37
+ var allowHtml,
38
+ tooltipDelay,
39
+ tooltipPosition,
40
+ tooltipText,
41
+ tooltipEl,
42
+ backdrop;
43
+ var setAttributes = function() {
44
+ allowHtml = origin.attr('data-html') ? origin.attr('data-html') === 'true' : options.html;
45
+ tooltipDelay = origin.attr('data-delay');
46
+ tooltipDelay = (tooltipDelay === undefined || tooltipDelay === '') ?
47
+ options.delay : tooltipDelay;
48
+ tooltipPosition = origin.attr('data-position');
49
+ tooltipPosition = (tooltipPosition === undefined || tooltipPosition === '') ?
50
+ options.position : tooltipPosition;
51
+ tooltipText = origin.attr('data-tooltip');
52
+ tooltipText = (tooltipText === undefined || tooltipText === '') ?
53
+ options.tooltip : tooltipText;
54
+ };
55
+ setAttributes();
56
+
57
+ var renderTooltipEl = function() {
58
+ var tooltip = $('<div class="material-tooltip"></div>');
59
+
60
+ // Create Text span
61
+ if (allowHtml) {
62
+ tooltipText = $('<span></span>').html(tooltipText);
63
+ } else{
64
+ tooltipText = $('<span></span>').text(tooltipText);
65
+ }
66
+
67
+ // Create tooltip
68
+ tooltip.append(tooltipText)
69
+ .appendTo($('body'))
70
+ .attr('id', tooltipId);
71
+
72
+ // Create backdrop
73
+ backdrop = $('<div class="backdrop"></div>');
74
+ backdrop.appendTo(tooltip);
75
+ return tooltip;
76
+ };
77
+ tooltipEl = renderTooltipEl();
78
+
79
+ // Destroy previously binded events
80
+ origin.off('mouseenter.tooltip mouseleave.tooltip');
81
+ // Mouse In
82
+ var started = false, timeoutRef;
83
+ origin.on({'mouseenter.tooltip': function(e) {
84
+ var showTooltip = function() {
85
+ setAttributes();
86
+ started = true;
87
+ tooltipEl.velocity('stop');
88
+ backdrop.velocity('stop');
89
+ tooltipEl.css({ display: 'block', left: '0px', top: '0px' });
90
+
91
+ // Tooltip positioning
92
+ var originWidth = origin.outerWidth();
93
+ var originHeight = origin.outerHeight();
94
+
95
+ var tooltipHeight = tooltipEl.outerHeight();
96
+ var tooltipWidth = tooltipEl.outerWidth();
97
+ var tooltipVerticalMovement = '0px';
98
+ var tooltipHorizontalMovement = '0px';
99
+ var scaleXFactor = 8;
100
+ var scaleYFactor = 8;
101
+ var targetTop, targetLeft, newCoordinates;
102
+
103
+ if (tooltipPosition === "top") {
104
+ // Top Position
105
+ targetTop = origin.offset().top - tooltipHeight - margin;
106
+ targetLeft = origin.offset().left + originWidth/2 - tooltipWidth/2;
107
+ newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
108
+
109
+ tooltipVerticalMovement = '-10px';
110
+ backdrop.css({
111
+ bottom: 0,
112
+ left: 0,
113
+ borderRadius: '14px 14px 0 0',
114
+ transformOrigin: '50% 100%',
115
+ marginTop: tooltipHeight,
116
+ marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
117
+ });
118
+ }
119
+ // Left Position
120
+ else if (tooltipPosition === "left") {
121
+ targetTop = origin.offset().top + originHeight/2 - tooltipHeight/2;
122
+ targetLeft = origin.offset().left - tooltipWidth - margin;
123
+ newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
124
+
125
+ tooltipHorizontalMovement = '-10px';
126
+ backdrop.css({
127
+ top: '-7px',
128
+ right: 0,
129
+ width: '14px',
130
+ height: '14px',
131
+ borderRadius: '14px 0 0 14px',
132
+ transformOrigin: '95% 50%',
133
+ marginTop: tooltipHeight/2,
134
+ marginLeft: tooltipWidth
135
+ });
136
+ }
137
+ // Right Position
138
+ else if (tooltipPosition === "right") {
139
+ targetTop = origin.offset().top + originHeight/2 - tooltipHeight/2;
140
+ targetLeft = origin.offset().left + originWidth + margin;
141
+ newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
142
+
143
+ tooltipHorizontalMovement = '+10px';
144
+ backdrop.css({
145
+ top: '-7px',
146
+ left: 0,
147
+ width: '14px',
148
+ height: '14px',
149
+ borderRadius: '0 14px 14px 0',
150
+ transformOrigin: '5% 50%',
151
+ marginTop: tooltipHeight/2,
152
+ marginLeft: '0px'
153
+ });
154
+ }
155
+ else {
156
+ // Bottom Position
157
+ targetTop = origin.offset().top + origin.outerHeight() + margin;
158
+ targetLeft = origin.offset().left + originWidth/2 - tooltipWidth/2;
159
+ newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
160
+ tooltipVerticalMovement = '+10px';
161
+ backdrop.css({
162
+ top: 0,
163
+ left: 0,
164
+ marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
165
+ });
166
+ }
167
+
168
+ // Set tooptip css placement
169
+ tooltipEl.css({
170
+ top: newCoordinates.y,
171
+ left: newCoordinates.x
172
+ });
173
+
174
+ // Calculate Scale to fill
175
+ scaleXFactor = Math.SQRT2 * tooltipWidth / parseInt(backdrop.css('width'));
176
+ scaleYFactor = Math.SQRT2 * tooltipHeight / parseInt(backdrop.css('height'));
177
+
178
+ tooltipEl.velocity({ marginTop: tooltipVerticalMovement, marginLeft: tooltipHorizontalMovement}, { duration: 350, queue: false })
179
+ .velocity({opacity: 1}, {duration: 300, delay: 50, queue: false});
180
+ backdrop.css({ display: 'block' })
181
+ .velocity({opacity:1},{duration: 55, delay: 0, queue: false})
182
+ .velocity({scaleX: scaleXFactor, scaleY: scaleYFactor}, {duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad'});
183
+ };
184
+
185
+ timeoutRef = setTimeout(showTooltip, tooltipDelay); // End Interval
186
+
187
+ // Mouse Out
188
+ },
189
+ 'mouseleave.tooltip': function(){
190
+ // Reset State
191
+ started = false;
192
+ clearTimeout(timeoutRef);
193
+
194
+ // Animate back
195
+ setTimeout(function() {
196
+ if (started !== true) {
197
+ tooltipEl.velocity({
198
+ opacity: 0, marginTop: 0, marginLeft: 0}, { duration: 225, queue: false});
199
+ backdrop.velocity({opacity: 0, scaleX: 1, scaleY: 1}, {
200
+ duration:225,
201
+ queue: false,
202
+ complete: function(){
203
+ backdrop.css('display', 'none');
204
+ tooltipEl.css('display', 'none');
205
+ started = false;}
206
+ });
207
+ }
208
+ },225);
209
+ }
210
+ });
211
+ });
212
+ };
213
+
214
+ var repositionWithinScreen = function(x, y, width, height) {
215
+ var newX = x;
216
+ var newY = y;
217
+
218
+ if (newX < 0) {
219
+ newX = 4;
220
+ } else if (newX + width > window.innerWidth) {
221
+ newX -= newX + width - window.innerWidth;
222
+ }
223
+
224
+ if (newY < 0) {
225
+ newY = 4;
226
+ } else if (newY + height > window.innerHeight + $(window).scrollTop) {
227
+ newY -= newY + height - window.innerHeight;
228
+ }
229
+
230
+ return {x: newX, y: newY};
231
+ };
232
+
233
+ $(document).ready(function(){
234
+ $('.tooltipped').tooltip();
235
+ });
236
+ }( jQuery ));