materialize-sass 0.95.1 → 0.95.2

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 (54) hide show
  1. data/.gitignore +1 -0
  2. data/README.md +18 -9
  3. data/app/assets/javascripts/{materialize-sprokets.js → materialize-sprockets.js} +5 -1
  4. data/app/assets/javascripts/materialize.js +453 -139
  5. data/app/assets/javascripts/materialize/animations.js +8 -0
  6. data/app/assets/javascripts/materialize/buttons.js +35 -0
  7. data/app/assets/javascripts/materialize/cards.js +7 -3
  8. data/app/assets/javascripts/materialize/collapsible.js +6 -6
  9. data/app/assets/javascripts/materialize/dropdown.js +42 -32
  10. data/app/assets/javascripts/materialize/forms.js +128 -18
  11. data/app/assets/javascripts/materialize/hammer.min.js +1 -1
  12. data/app/assets/javascripts/materialize/init.js +13 -36
  13. data/app/assets/javascripts/materialize/jquery.easing.1.3.js +34 -34
  14. data/app/assets/javascripts/materialize/parallax.js +19 -17
  15. data/app/assets/javascripts/materialize/scrollFire.js +29 -0
  16. data/app/assets/javascripts/materialize/scrollspy.js +1 -1
  17. data/app/assets/javascripts/materialize/sideNav.js +32 -16
  18. data/app/assets/javascripts/materialize/slider.js +16 -9
  19. data/app/assets/javascripts/materialize/transitions.js +94 -0
  20. data/app/assets/stylesheets/materialize.scss +30 -30
  21. data/app/assets/stylesheets/{components → materialize/components}/_buttons.scss +29 -0
  22. data/app/assets/stylesheets/{components → materialize/components}/_cards.scss +36 -7
  23. data/app/assets/stylesheets/{components → materialize/components}/_collapsible.scss +0 -0
  24. data/app/assets/stylesheets/{components → materialize/components}/_color.scss +0 -0
  25. data/app/assets/stylesheets/{components → materialize/components}/_dropdown.scss +2 -2
  26. data/app/assets/stylesheets/{components → materialize/components}/_form.scss +88 -31
  27. data/app/assets/stylesheets/{components → materialize/components}/_global.scss +63 -13
  28. data/app/assets/stylesheets/{components → materialize/components}/_grid.scss +0 -0
  29. data/app/assets/stylesheets/{components → materialize/components}/_icons-material-design.scss +5 -5
  30. data/app/assets/stylesheets/{components → materialize/components}/_materialbox.scss +0 -0
  31. data/app/assets/stylesheets/{components → materialize/components}/_mixins.scss +0 -0
  32. data/app/assets/stylesheets/{components → materialize/components}/_modal.scss +34 -8
  33. data/app/assets/stylesheets/{components → materialize/components}/_navbar.scss +9 -4
  34. data/app/assets/stylesheets/{components → materialize/components}/_normalize.scss +0 -0
  35. data/app/assets/stylesheets/{components → materialize/components}/_prefixer.scss +3 -4
  36. data/app/assets/stylesheets/{components → materialize/components}/_preloader.scss +0 -0
  37. data/app/assets/stylesheets/{components → materialize/components}/_roboto.scss +5 -5
  38. data/app/assets/stylesheets/{components → materialize/components}/_sideNav.scss +28 -67
  39. data/app/assets/stylesheets/{components → materialize/components}/_slider.scss +5 -1
  40. data/app/assets/stylesheets/{components → materialize/components}/_table_of_contents.scss +0 -0
  41. data/app/assets/stylesheets/{components → materialize/components}/_tabs.scss +0 -0
  42. data/app/assets/stylesheets/{components → materialize/components}/_toast.scss +0 -0
  43. data/app/assets/stylesheets/{components → materialize/components}/_tooltip.scss +0 -0
  44. data/app/assets/stylesheets/{components → materialize/components}/_typography.scss +0 -0
  45. data/app/assets/stylesheets/{components → materialize/components}/_variables.scss +6 -2
  46. data/app/assets/stylesheets/{components → materialize/components}/_waves.scss +0 -0
  47. data/app/assets/stylesheets/{components → materialize/components}/date_picker/_default.date.scss +0 -0
  48. data/app/assets/stylesheets/{components → materialize/components}/date_picker/_default.scss +0 -0
  49. data/app/assets/stylesheets/{components → materialize/components}/date_picker/_default.time.scss +0 -0
  50. data/lib/materialize-sass.rb +7 -0
  51. data/lib/materialize-sass/version.rb +1 -1
  52. data/materialize-sass.gemspec +4 -0
  53. metadata +68 -42
  54. checksums.yaml +0 -7
@@ -0,0 +1,8 @@
1
+ // Custom Easing
2
+ jQuery.extend( jQuery.easing,
3
+ {
4
+ easeInOutMaterial: function (x, t, b, c, d) {
5
+ if ((t/=d/2) < 1) return c/2*t*t + b;
6
+ return c/4*((t-=2)*t*t + 2) + b;
7
+ }
8
+ });
@@ -0,0 +1,35 @@
1
+ (function ($) {
2
+ $(document).ready(function() {
3
+
4
+ // jQuery reverse
5
+ jQuery.fn.reverse = [].reverse;
6
+
7
+ $('.fixed-action-btn').each(function (i) {
8
+ var $this = $(this);
9
+ $this.find('ul a.btn-floating').velocity(
10
+ { scaleY: ".4", scaleX: ".4", translateY: "40px"},
11
+ { duration: 0 });
12
+
13
+
14
+ var timer;
15
+ $this.hover(
16
+ function() {
17
+ var time = 0;
18
+ $this.find('ul a.btn-floating').reverse().each(function () {
19
+ $(this).velocity(
20
+ { opacity: "1", scaleX: "1", scaleY: "1", translateY: "0"},
21
+ { duration: 100, delay: time });
22
+ time += 40;
23
+ });
24
+ }, function() {
25
+ var time = 0;
26
+ $this.find('ul a.btn-floating').velocity("stop", true);
27
+ $this.find('ul a.btn-floating').velocity(
28
+ { opacity: "0", scaleX: ".4", scaleY: ".4", translateY: "40px"},
29
+ { duration: 100 });
30
+ }
31
+ );
32
+ });
33
+
34
+ });
35
+ }( jQuery ));
@@ -1,14 +1,18 @@
1
1
  (function ($) {
2
2
  $(document).ready(function() {
3
3
 
4
+ $('.card > .card-reveal').each(function() {
5
+ $(this).parent().css('overflow', 'hidden');
6
+ });
7
+
4
8
  $(document).on('click.card', '.card', function (e) {
5
9
  if ($(this).find('.card-reveal').length) {
6
10
  if ($(e.target).is($('.card-reveal .card-title')) || $(e.target).is($('.card-reveal .card-title i'))) {
7
- $(this).find('.card-reveal').velocity({translateY: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'});
11
+ $(this).find('.card-reveal').velocity({translateY: 0}, {duration: 225, queue: false, easing: 'easeInOutQuad'});
8
12
  }
9
13
  else if ($(e.target).is($('.card .activator')) ||
10
14
  $(e.target).is($('.card .activator i')) ) {
11
- $(this).find('.card-reveal').velocity({translateY: '-100%'}, {duration: 300, queue: false, easing: 'easeOutQuad'});
15
+ $(this).find('.card-reveal').velocity({translateY: '-100%'}, {duration: 300, queue: false, easing: 'easeInOutQuad'});
12
16
  }
13
17
  }
14
18
 
@@ -16,4 +20,4 @@
16
20
  });
17
21
 
18
22
  });
19
- }( jQuery ));
23
+ }( jQuery ));
@@ -16,8 +16,8 @@
16
16
  var collapsible_type = $this.data("collapsible");
17
17
 
18
18
  // Turn off any existing event handlers
19
- $this.off();
20
- $this.children().off();
19
+ $this.off('click.collapse', '.collapsible-header');
20
+ $panel_headers.off('click.collapse');
21
21
 
22
22
 
23
23
  /****************
@@ -54,8 +54,8 @@
54
54
 
55
55
  if (options.accordion || collapsible_type == "accordion" || collapsible_type == undefined) { // Handle Accordion
56
56
 
57
- // Event delegation to open collapsible section
58
- $this.on('click', '.collapsible-header', function (e) {
57
+ // Event delegation to all collapsible section
58
+ $this.on('click.collapse', '.collapsible-header', function (e) {
59
59
  accordionOpen($(e.currentTarget));
60
60
  });
61
61
 
@@ -66,7 +66,7 @@
66
66
  $panel_headers.each(function () {
67
67
 
68
68
  // Event delegation to open collapsible section
69
- $this.on('click', '.collapsible-header', function (e) {
69
+ $(this).on('click.collapse', function (e) {
70
70
  collapsibleOpen($(e.currentTarget));
71
71
  });
72
72
 
@@ -84,4 +84,4 @@
84
84
  $(document).ready(function(){
85
85
  $('.collapsible').collapsible();
86
86
  });
87
- }( jQuery ));
87
+ }( jQuery ));
@@ -1,5 +1,12 @@
1
1
  (function ($) {
2
2
 
3
+ // Add posibility to scroll to selected option
4
+ // usefull for select for example
5
+ $.fn.scrollTo = function(elem) {
6
+ $(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem).offset().top);
7
+ return this;
8
+ };
9
+
3
10
  $.fn.dropdown = function (options) {
4
11
  var defaults = {
5
12
  inDuration: 300,
@@ -7,7 +14,8 @@
7
14
  constrain_width: true, // Constrains width of dropdown to the activator
8
15
  hover: true,
9
16
  alignment: 'left',
10
- gutter: 0 // Spacing from edge
17
+ gutter: 0, // Spacing from edge
18
+ belowOrigin: false
11
19
  }
12
20
 
13
21
  options = $.extend(defaults, options);
@@ -30,6 +38,8 @@
30
38
  options.alignment = origin.data('alignment');
31
39
  if (origin.data('gutter') != undefined)
32
40
  options.gutter = origin.data('gutter');
41
+ if (origin.data('beloworigin') != undefined)
42
+ options.belowOrigin = origin.data('beloworigin');
33
43
  }
34
44
 
35
45
  updateOptions();
@@ -40,6 +50,8 @@
40
50
  $('body').append(activates);
41
51
  }
42
52
 
53
+ var dropdownRealHeight = activates.height();
54
+
43
55
  /*
44
56
  Helper function to position and resize dropdown.
45
57
  Used in hover and click handler.
@@ -48,10 +60,13 @@
48
60
  // Check html data attributes
49
61
  updateOptions();
50
62
 
51
- var dropdownRealHeight = activates.height();
52
63
  if (options.constrain_width == true) {
53
64
  activates.css('width', origin.outerWidth());
54
65
  }
66
+ var offset = 0;
67
+ if (options.belowOrigin == true) {
68
+ offset = origin.height();
69
+ }
55
70
  // Handle edge alignment
56
71
  var width_difference = 0;
57
72
  var gutter_spacing = options.gutter;
@@ -64,14 +79,14 @@
64
79
  display: 'block',
65
80
  position: 'fixed',
66
81
  height: 0,
67
- top: origin.offset().top - $(window).scrollTop(),
82
+ top: origin.offset().top - $(window).scrollTop() + offset,
68
83
  left: origin.offset().left + width_difference + gutter_spacing
69
84
  });
70
85
  }
71
86
  else {
72
87
  activates.css({
73
88
  display: 'block',
74
- top: origin.offset().top,
89
+ top: origin.offset().top + offset,
75
90
  left: origin.offset().left + width_difference + gutter_spacing,
76
91
  height: 0
77
92
  });
@@ -102,6 +117,22 @@
102
117
  return isFixed;
103
118
  }
104
119
 
120
+ function hideDropdown() {
121
+ activates.velocity(
122
+ {
123
+ opacity: 0
124
+ },
125
+ {
126
+ duration: options.outDuration,
127
+ easing: 'easeOutQuad',
128
+ complete: function(){
129
+ activates.css({
130
+ display: 'none',
131
+ 'overflow-y': ''
132
+ });
133
+ }
134
+ });
135
+ }
105
136
 
106
137
  // Hover
107
138
  if (options.hover) {
@@ -112,20 +143,7 @@
112
143
 
113
144
  // Document click handler
114
145
  activates.on('mouseleave', function(e){ // Mouse out
115
- activates.velocity(
116
- {
117
- opacity: 0
118
- },
119
- {
120
- duration: options.outDuration,
121
- easing: 'easeOutQuad',
122
- complete: function(){
123
- activates.css({
124
- display: 'none',
125
- 'overflow-y': ''
126
- });
127
- }
128
- });
146
+ hideDropdown();
129
147
  });
130
148
 
131
149
  // Click
@@ -139,19 +157,7 @@
139
157
  placeDropdown();
140
158
  $(document).bind('click.'+ activates.attr('id'), function (e) {
141
159
  if (!activates.is(e.target) && (!origin.is(e.target))) {
142
- activates.velocity({
143
- opacity: 0
144
- },
145
- {
146
- duration: options.outDuration,
147
- easing: 'easeOutQuad',
148
- complete: function(){
149
- activates.css({
150
- display: 'none',
151
- 'overflow-y': ''
152
- });
153
- }
154
- });
160
+ hideDropdown();
155
161
  $(document).unbind('click.' + activates.attr('id'));
156
162
  }
157
163
  });
@@ -159,10 +165,14 @@
159
165
 
160
166
  } // End else
161
167
 
168
+ // Listen to open and close event - usefull for select component
169
+ origin.on('open', placeDropdown);
170
+ origin.on('close', hideDropdown);
171
+
162
172
  // Window Resize Reposition
163
173
  $(document).on('resize', function(){
164
174
 
165
175
  });
166
176
  });
167
177
  }; // End dropdown plugin
168
- }( jQuery ));
178
+ }( jQuery ));
@@ -7,8 +7,9 @@
7
7
  // Add active if form auto complete
8
8
  $(document).on('change', input_selector, function () {
9
9
  if($(this).val().length !== 0) {
10
- $(this).siblings('label, i').addClass('active');
10
+ $(this).siblings('label, i').addClass('active');
11
11
  }
12
+ validate_field($(this));
12
13
  });
13
14
 
14
15
  // Add active if input element has been pre-populated on document ready
@@ -28,7 +29,7 @@
28
29
  // Reset select
29
30
  $(this).find('select.initialized').each(function () {
30
31
  var reset_text = $(this).find('option[selected]').text();
31
- $(this).prev('span.select-dropdown').html(reset_text);
32
+ $(this).siblings('input.select-dropdown').val(reset_text);
32
33
  });
33
34
  }
34
35
  });
@@ -41,25 +42,30 @@
41
42
  $(document).on('blur', input_selector, function () {
42
43
  if ($(this).val().length === 0) {
43
44
  $(this).siblings('label, i').removeClass('active');
45
+ }
46
+ validate_field($(this));
47
+ });
44
48
 
45
- if ($(this).hasClass('validate')) {
46
- $(this).removeClass('valid');
47
- $(this).removeClass('invalid');
49
+ validate_field = function(object) {
50
+ if (object.val().length === 0) {
51
+ if (object.hasClass('validate')) {
52
+ object.removeClass('valid');
53
+ object.removeClass('invalid');
48
54
  }
49
55
  }
50
56
  else {
51
- if ($(this).hasClass('validate')) {
52
- if ($(this).is(':valid')) {
53
- $(this).removeClass('invalid');
54
- $(this).addClass('valid');
57
+ if (object.hasClass('validate')) {
58
+ if (object.is(':valid')) {
59
+ object.removeClass('invalid');
60
+ object.addClass('valid');
55
61
  }
56
62
  else {
57
- $(this).removeClass('valid');
58
- $(this).addClass('invalid');
63
+ object.removeClass('valid');
64
+ object.addClass('invalid');
59
65
  }
60
66
  }
61
67
  }
62
- });
68
+ }
63
69
 
64
70
 
65
71
  // Textarea Auto Resize
@@ -89,6 +95,16 @@
89
95
  });
90
96
 
91
97
 
98
+ // File Input Path
99
+ $('.file-field').each(function() {
100
+ var path_input = $(this).find('input.file-path');
101
+ $(this).find('input[type="file"]').change(function () {
102
+ path_input.val($(this).val());
103
+ path_input.trigger('change');
104
+ });
105
+ });
106
+
107
+
92
108
  // Range Input
93
109
  var range_type = 'input[type=range]';
94
110
  var range_mousedown = false;
@@ -164,15 +180,13 @@
164
180
  }
165
181
  });
166
182
 
167
-
168
-
169
-
170
183
  // Select Functionality
171
184
 
172
185
  // Select Plugin
173
186
  $.fn.material_select = function (callback) {
174
187
  $(this).each(function(){
175
188
  $select = $(this);
189
+
176
190
  if ( $select.hasClass('browser-default') || $select.hasClass('initialized')) {
177
191
  return; // Continue to next (return false breaks out of entire loop)
178
192
  }
@@ -204,7 +218,7 @@
204
218
  $curr_select.find('option').eq(i).prop('selected', true);
205
219
  // Trigger onchange() event
206
220
  $curr_select.trigger('change');
207
- $curr_select.prev('span.select-dropdown').html($(this).text());
221
+ $curr_select.siblings('input.select-dropdown').val($(this).text());
208
222
  if (typeof callback !== 'undefined') callback();
209
223
  }
210
224
  });
@@ -214,8 +228,8 @@
214
228
  // Wrap Elements
215
229
  $select.wrap(wrapper);
216
230
  // Add Select Display Element
217
- var $newSelect = $('<span class="select-dropdown ' + (($select.is(':disabled')) ? 'disabled' : '')
218
- + '" data-activates="select-options-' + uniqueID +'">' + label.html() + '</span>');
231
+ var $newSelect = $('<input type="text" class="select-dropdown" readonly="true" ' + (($select.is(':disabled')) ? 'disabled' : '')
232
+ + ' data-activates="select-options-' + uniqueID +'" value="'+ label.html() +'"/><i class="mdi-navigation-arrow-drop-down">');
219
233
  $select.before($newSelect);
220
234
  $('body').append(options);
221
235
  // Check if section element is disabled
@@ -224,6 +238,102 @@
224
238
  }
225
239
  $select.addClass('initialized');
226
240
 
241
+ $newSelect.on('focus', function(){
242
+ $(this).trigger('open');
243
+ label = $(this).val();
244
+ selectedOption = options.find('li').filter(function() {
245
+ return $(this).text().toLowerCase() === label.toLowerCase();
246
+ })[0];
247
+ activateOption(options, selectedOption);
248
+ });
249
+
250
+ $newSelect.on('blur', function(){
251
+ $(this).trigger('close');
252
+ });
253
+
254
+ // Make option as selected and scroll to selected position
255
+ activateOption = function(collection, newOption) {
256
+ collection.find('li.active').removeClass('active');
257
+ $(newOption).addClass('active');
258
+ collection.scrollTo(newOption);
259
+ }
260
+
261
+ // Allow user to search by typing
262
+ // this array is cleared after 1 second
263
+ filterQuery = []
264
+
265
+ onKeyDown = function(event){
266
+ // TAB - switch to another input
267
+ if(event.which == 9){
268
+ $newSelect.trigger('close');
269
+ return
270
+ }
271
+
272
+ // ARROW DOWN WHEN SELECT IS CLOSED - open select options
273
+ if(event.which == 40 && !options.is(":visible")){
274
+ $newSelect.trigger('open');
275
+ return
276
+ }
277
+
278
+ // ENTER WHEN SELECT IS CLOSED - submit form
279
+ if(event.which == 13 && !options.is(":visible")){
280
+ return
281
+ }
282
+
283
+ event.preventDefault();
284
+
285
+ // CASE WHEN USER TYPE LETTERS
286
+ letter = String.fromCharCode(event.which).toLowerCase();
287
+
288
+ if (letter){
289
+ filterQuery.push(letter);
290
+
291
+ string = filterQuery.join("");
292
+
293
+ newOption = options.find('li').filter(function() {
294
+ return $(this).text().toLowerCase().indexOf(string) === 0;
295
+ })[0];
296
+
297
+ if(newOption){
298
+ activateOption(options, newOption);
299
+ }
300
+ }
301
+
302
+ // ENTER - select option and close when select options are opened
303
+ if(event.which == 13){
304
+ activeOption = options.find('li.active:not(.disabled)')[0];
305
+ if(activeOption){
306
+ $(activeOption).trigger('click');
307
+ $newSelect.trigger('close');
308
+ }
309
+ }
310
+
311
+ // ARROW DOWN - move to next not disabled option
312
+ if(event.which == 40){
313
+ newOption = options.find('li.active').next('li:not(.disabled)')[0];
314
+ if(newOption){
315
+ activateOption(options, newOption);
316
+ }
317
+ }
318
+
319
+ // ESC - close options
320
+ if(event.which == 27){
321
+ $newSelect.trigger('close');
322
+ }
323
+
324
+ // ARROW UP - move to previous not disabled option
325
+ if(event.which == 38){
326
+ newOption = options.find('li.active').prev('li:not(.disabled)')[0];
327
+ if(newOption){
328
+ activateOption(options, newOption);
329
+ }
330
+ }
331
+
332
+ // Automaticaly clean filter query so user can search again by starting letters
333
+ setTimeout(function(){filterQuery = []}, 1000)
334
+ }
335
+
336
+ $newSelect.on('keydown', onKeyDown);
227
337
  });
228
338
  }
229
339