mtl 1.1.0 → 1.1.1

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mtl/dropdown.coffee +1 -1
  3. data/app/assets/stylesheets/mtl/extend/_chips.scss +20 -0
  4. data/app/assets/stylesheets/mtl/extend/_side-nav.scss +4 -2
  5. data/lib/generators/mtl/templates/_variables.scss +5 -0
  6. data/lib/mtl/version.rb +2 -2
  7. data/mtl.gemspec +11 -0
  8. data/package.json +1 -1
  9. data/vendor/assets/javascripts/materialize/animation.js +8 -9
  10. data/vendor/assets/javascripts/materialize/carousel.js +51 -24
  11. data/vendor/assets/javascripts/materialize/character_counter.js +2 -2
  12. data/vendor/assets/javascripts/materialize/chips.js +40 -11
  13. data/vendor/assets/javascripts/materialize/dropdown.js +12 -12
  14. data/vendor/assets/javascripts/materialize/forms.js +131 -35
  15. data/vendor/assets/javascripts/materialize/global.js +55 -0
  16. data/vendor/assets/javascripts/materialize/init.js +40 -3
  17. data/vendor/assets/javascripts/materialize/materialbox.js +93 -77
  18. data/vendor/assets/javascripts/materialize/modal.js +12 -12
  19. data/vendor/assets/javascripts/materialize/parallax.js +48 -48
  20. data/vendor/assets/javascripts/materialize/scrollFire.js +40 -37
  21. data/vendor/assets/javascripts/materialize/scrollspy.js +2 -53
  22. data/vendor/assets/javascripts/materialize/sideNav.js +46 -40
  23. data/vendor/assets/javascripts/materialize/slider.js +15 -12
  24. data/vendor/assets/javascripts/materialize/tabs.js +104 -35
  25. data/vendor/assets/javascripts/materialize/toasts.js +122 -123
  26. data/vendor/assets/javascripts/materialize/tooltip.js +15 -13
  27. data/vendor/assets/javascripts/materialize/transitions.js +24 -24
  28. data/vendor/assets/stylesheets/materialize/_badges.scss +46 -0
  29. data/vendor/assets/stylesheets/materialize/_buttons.scss +29 -17
  30. data/vendor/assets/stylesheets/materialize/_cards.scss +9 -3
  31. data/vendor/assets/stylesheets/materialize/_carousel.scss +1 -1
  32. data/vendor/assets/stylesheets/materialize/_collapsible.scss +3 -7
  33. data/vendor/assets/stylesheets/materialize/_global.scss +5 -61
  34. data/vendor/assets/stylesheets/materialize/_materialbox.scss +13 -12
  35. data/vendor/assets/stylesheets/materialize/_navbar.scss +26 -7
  36. data/vendor/assets/stylesheets/materialize/_sideNav.scss +5 -5
  37. data/vendor/assets/stylesheets/materialize/_table_of_contents.scss +2 -2
  38. data/vendor/assets/stylesheets/materialize/_toast.scss +1 -1
  39. data/vendor/assets/stylesheets/materialize/_tooltip.scss +2 -3
  40. data/vendor/assets/stylesheets/materialize/_transitions.scss +13 -0
  41. data/vendor/assets/stylesheets/materialize/_variables.scss +7 -1
  42. data/vendor/assets/stylesheets/materialize/_waves.scss +80 -143
  43. data/vendor/assets/stylesheets/materialize/forms/_input-fields.scss +4 -4
  44. metadata +9 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 08081cb22a5be14a4c4414c87e810b81ef1e6583
4
- data.tar.gz: 20c8e64b6ef82f5e99497509e52d1c9b6ad2102d
3
+ metadata.gz: 58be2225ba79d3bbbb74d40af9f194ef4f841e73
4
+ data.tar.gz: 0ef8ff2feb48bd40ab7af804238575f52f3e8a5a
5
5
  SHA512:
6
- metadata.gz: 2e1758ed56f6ed803ee82fed48b5a4c456dab5c643289e3abc3fbb4098f32109983c663b40d70d6d17390b97a0a54fec6f7ce7d4ab3aea1276337769f35c642e
7
- data.tar.gz: 922222e382812a4274e2040619c4c91676537b1e1b5bb9d2793767187f8964d5d2879bd9246c5747b35e2844039408ea9cb33b1c52b551597c53430d9b3616a1
6
+ metadata.gz: 2a3d69bb43e9b7abef1f5f6adcb7dd9f42fb1d1ae8ce560f2a5e19421b542b9d2f8ffd7e069549a7fa939544250f5e9a35f7c0ded7950505018bb1327bb917ef
7
+ data.tar.gz: 89c4eba164571e5aa964f5f8e8a727b5110c51e1eea6b889f72b284a8c7d4a00f5dafd2cdcdb7a9bcd5951fe20c736c54cc84d889e95db0bd9bb6a0b98922468
@@ -14,7 +14,7 @@ activator = ($el) ->
14
14
  init = ->
15
15
  $('[data-mtl-dropdown]').each ->
16
16
  $el = $(this)
17
- updateAttrs($el).dropdown(constrain_width: false)
17
+ updateAttrs($el).dropdown(constrainWidth: false)
18
18
  $el.siblings('input.select-dropdown').on 'mousedown', (e) ->
19
19
  e.preventDefault() if e.clientX >= e.target.clientWidth || e.clientY >= e.target.clientHeight
20
20
 
@@ -1,3 +1,23 @@
1
1
  .chip {
2
+ border-radius: $chip-border-radius;
3
+ height: $chip-height;
4
+ line-height: $chip-line-height;
5
+ font-size: $chip-font-size;
6
+ font-weight: $chip-font-weight;
2
7
  white-space: nowrap;
8
+ padding-right: $chip-height / 2;
9
+
10
+ > img {
11
+ border-radius: $chip-border-radius;
12
+ height: $chip-height;
13
+ margin-right: $chip-height / 4;
14
+ width: $chip-height;
15
+ }
16
+
17
+ .close {
18
+ font-size: $chip-font-size + 3px;
19
+ height: $chip-height;
20
+ line-height: $chip-line-height;
21
+ padding-left: ($chip-font-size + 3px) / 2;
22
+ }
3
23
  }
@@ -2,11 +2,13 @@
2
2
  .side-nav {
3
3
 
4
4
  // scss-lint:disable QualifyingElement
5
- li.active > a,
6
- li.active > a i.material-icons {
5
+ li.active > a {
7
6
  // scss-lint:enable QualifyingElement
8
7
  background-color: $mtl-sidenav-bg-active-color;
9
8
  color: $mtl-sidenav-font-active-color;
9
+ .material-icons {
10
+ color: $mtl-sidenav-font-active-color;
11
+ }
10
12
  }
11
13
 
12
14
  ul {
@@ -108,6 +108,11 @@ $chip-bg-color: #e4e4e4 !default;
108
108
  $chip-border-color: #9e9e9e !default;
109
109
  $chip-selected-color: #26a69a !default;
110
110
  $chip-margin: 5px !default;
111
+ $chip-height: 32px !default;
112
+ $chip-line-height: 32px !default;
113
+ $chip-font-size: 13px !default;
114
+ $chip-font-weight: 500 !default;
115
+ $chip-border-radius: 16px !default;
111
116
 
112
117
 
113
118
  // 7. Date Picker ===========================================================
data/lib/mtl/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Mtl
2
- VERSION = '1.1.0'.freeze
3
- MATERIALIZE_VERSION = '0.97.8'.freeze
2
+ VERSION = '1.1.1'.freeze
3
+ MATERIALIZE_VERSION = '0.98.0'.freeze
4
4
  ICONS_VERSION = '2.2.3'.freeze
5
5
  LODASH_VERSION = '4.14.1'.freeze
6
6
  PDFOBJECT_VERSION = '2.0.201604172'.freeze
data/mtl.gemspec CHANGED
@@ -32,4 +32,15 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'rspec', '> 3.0'
33
33
  spec.add_development_dependency 'actionview'
34
34
  spec.add_development_dependency 'simple_form', '>= 3.3'
35
+
36
+ spec.post_install_message = %q{
37
+ Some component have been extend with configuration variables, don't forget to re-generate the scss configuration or
38
+ add the following values to your existing one:
39
+
40
+ $chip-height: 32px !default;
41
+ $chip-line-height: 32px !default;
42
+ $chip-font-size: 13px !default;
43
+ $chip-font-weight: 500 !default;
44
+ $chip-border-radius: 16px !default;
45
+ }
35
46
  end
data/package.json CHANGED
@@ -6,6 +6,6 @@
6
6
  "pdfobject": "2.0",
7
7
  "lodash": "4.14.1",
8
8
  "material-design-icons": "2.2.3",
9
- "materialize-css": "https://github.com/Dogfalo/materialize.git#fda1e45"
9
+ "materialize-css": "https://github.com/Dogfalo/materialize.git#v0.98.0"
10
10
  }
11
11
  }
@@ -1,9 +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
- });
9
-
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
+ });
@@ -4,19 +4,20 @@
4
4
 
5
5
  init : function(options) {
6
6
  var defaults = {
7
- time_constant: 200, // ms
7
+ duration: 200, // ms
8
8
  dist: -100, // zoom scale TODO: make this more intuitive as an option
9
9
  shift: 0, // spacing for center image
10
10
  padding: 0, // Padding between non center items
11
- full_width: false, // Change to full width styles
11
+ fullWidth: false, // Change to full width styles
12
12
  indicators: false, // Toggle indicators
13
- no_wrap: false // Don't wrap around and cycle through items.
13
+ noWrap: false, // Don't wrap around and cycle through items.
14
+ onCycleTo: null // Callback for when a new slide is cycled to.
14
15
  };
15
16
  options = $.extend(defaults, options);
16
17
 
17
18
  return this.each(function() {
18
19
 
19
- var images, offset, center, pressed, dim, count,
20
+ var images, item_width, item_height, offset, center, pressed, dim, count,
20
21
  reference, referenceY, amplitude, target, velocity,
21
22
  xform, frame, timestamp, ticker, dragged, vertical_dragged;
22
23
  var $indicators = $('<ul class="indicators"></ul>');
@@ -35,7 +36,7 @@
35
36
 
36
37
 
37
38
  // Options
38
- if (options.full_width) {
39
+ if (options.fullWidth) {
39
40
  options.dist = 0;
40
41
  var firstImage = view.find('.carousel-item img').first();
41
42
  if (firstImage.length) {
@@ -59,6 +60,7 @@
59
60
  offset = target = 0;
60
61
  images = [];
61
62
  item_width = view.find('.carousel-item').first().innerWidth();
63
+ item_height = view.find('.carousel-item').first().innerHeight();
62
64
  dim = item_width * 2 + options.padding;
63
65
 
64
66
  view.find('.carousel-item').each(function (i) {
@@ -72,7 +74,9 @@
72
74
  }
73
75
 
74
76
  // Handle clicks on indicators.
75
- $indicator.click(function () {
77
+ $indicator.click(function (e) {
78
+ e.stopPropagation();
79
+
76
80
  var index = $(this).index();
77
81
  cycleTo(index);
78
82
  });
@@ -125,6 +129,7 @@
125
129
 
126
130
  function scroll(x) {
127
131
  var i, half, delta, dir, tween, el, alignment, xTranslation;
132
+ var lastCenter = center;
128
133
 
129
134
  offset = (typeof x === 'number') ? x : offset;
130
135
  center = Math.floor((offset + dim / 2) / dim);
@@ -133,9 +138,9 @@
133
138
  tween = -dir * delta * 2 / dim;
134
139
  half = count >> 1;
135
140
 
136
- if (!options.full_width) {
141
+ if (!options.fullWidth) {
137
142
  alignment = 'translateX(' + (view[0].clientWidth - item_width) / 2 + 'px) ';
138
- alignment += 'translateY(' + (view[0].clientHeight - item_width) / 2 + 'px)';
143
+ alignment += 'translateY(' + (view[0].clientHeight - item_height) / 2 + 'px)';
139
144
  } else {
140
145
  alignment = 'translateX(0)';
141
146
  }
@@ -152,14 +157,20 @@
152
157
 
153
158
  // center
154
159
  // Don't show wrapped items.
155
- if (!options.no_wrap || (center >= 0 && center < count)) {
160
+ if (!options.noWrap || (center >= 0 && center < count)) {
156
161
  el = images[wrap(center)];
162
+
163
+ // Add active class to center item.
164
+ if (!$(el).hasClass('active')) {
165
+ view.find('.carousel-item').removeClass('active');
166
+ $(el).addClass('active');
167
+ }
157
168
  el.style[xform] = alignment +
158
169
  ' translateX(' + (-delta / 2) + 'px)' +
159
170
  ' translateX(' + (dir * options.shift * tween * i) + 'px)' +
160
171
  ' translateZ(' + (options.dist * tween) + 'px)';
161
172
  el.style.zIndex = 0;
162
- if (options.full_width) { tweenedOpacity = 1; }
173
+ if (options.fullWidth) { tweenedOpacity = 1; }
163
174
  else { tweenedOpacity = 1 - 0.2 * tween; }
164
175
  el.style.opacity = tweenedOpacity;
165
176
  el.style.display = 'block';
@@ -167,7 +178,7 @@
167
178
 
168
179
  for (i = 1; i <= half; ++i) {
169
180
  // right side
170
- if (options.full_width) {
181
+ if (options.fullWidth) {
171
182
  zTranslation = options.dist;
172
183
  tweenedOpacity = (i === half && delta < 0) ? 1 - tween : 1;
173
184
  } else {
@@ -175,7 +186,7 @@
175
186
  tweenedOpacity = 1 - 0.2 * (i * 2 + tween * dir);
176
187
  }
177
188
  // Don't show wrapped items.
178
- if (!options.no_wrap || center + i < count) {
189
+ if (!options.noWrap || center + i < count) {
179
190
  el = images[wrap(center + i)];
180
191
  el.style[xform] = alignment +
181
192
  ' translateX(' + (options.shift + (dim * i - delta) / 2) + 'px)' +
@@ -187,7 +198,7 @@
187
198
 
188
199
 
189
200
  // left side
190
- if (options.full_width) {
201
+ if (options.fullWidth) {
191
202
  zTranslation = options.dist;
192
203
  tweenedOpacity = (i === half && delta > 0) ? 1 - tween : 1;
193
204
  } else {
@@ -195,7 +206,7 @@
195
206
  tweenedOpacity = 1 - 0.2 * (i * 2 - tween * dir);
196
207
  }
197
208
  // Don't show wrapped items.
198
- if (!options.no_wrap || center - i >= 0) {
209
+ if (!options.noWrap || center - i >= 0) {
199
210
  el = images[wrap(center - i)];
200
211
  el.style[xform] = alignment +
201
212
  ' translateX(' + (-options.shift + (-dim * i - delta) / 2) + 'px)' +
@@ -208,18 +219,25 @@
208
219
 
209
220
  // center
210
221
  // Don't show wrapped items.
211
- if (!options.no_wrap || (center >= 0 && center < count)) {
222
+ if (!options.noWrap || (center >= 0 && center < count)) {
212
223
  el = images[wrap(center)];
213
224
  el.style[xform] = alignment +
214
225
  ' translateX(' + (-delta / 2) + 'px)' +
215
226
  ' translateX(' + (dir * options.shift * tween) + 'px)' +
216
227
  ' translateZ(' + (options.dist * tween) + 'px)';
217
228
  el.style.zIndex = 0;
218
- if (options.full_width) { tweenedOpacity = 1; }
229
+ if (options.fullWidth) { tweenedOpacity = 1; }
219
230
  else { tweenedOpacity = 1 - 0.2 * tween; }
220
231
  el.style.opacity = tweenedOpacity;
221
232
  el.style.display = 'block';
222
233
  }
234
+
235
+ // onCycleTo callback
236
+ if (lastCenter !== center &&
237
+ typeof(options.onCycleTo) === "function") {
238
+ var $curr_item = view.find('.carousel-item').eq(wrap(center));
239
+ options.onCycleTo.call(this, $curr_item, dragged);
240
+ }
223
241
  }
224
242
 
225
243
  function track() {
@@ -240,7 +258,7 @@
240
258
 
241
259
  if (amplitude) {
242
260
  elapsed = Date.now() - timestamp;
243
- delta = amplitude * Math.exp(-elapsed / options.time_constant);
261
+ delta = amplitude * Math.exp(-elapsed / options.duration);
244
262
  if (delta > 2 || delta < -2) {
245
263
  scroll(target - delta);
246
264
  requestAnimationFrame(autoScroll);
@@ -257,7 +275,7 @@
257
275
  e.stopPropagation();
258
276
  return false;
259
277
 
260
- } else if (!options.full_width) {
278
+ } else if (!options.fullWidth) {
261
279
  var clickedIndex = $(e.target).closest('.carousel-item').index();
262
280
  var diff = (center % count) - clickedIndex;
263
281
 
@@ -274,7 +292,7 @@
274
292
  var diff = (center % count) - n;
275
293
 
276
294
  // Account for wraparound.
277
- if (!options.no_wrap) {
295
+ if (!options.noWrap) {
278
296
  if (diff < 0) {
279
297
  if (Math.abs(diff + count) < Math.abs(diff)) { diff += count; }
280
298
 
@@ -358,7 +376,7 @@
358
376
  target = Math.round(target / dim) * dim;
359
377
 
360
378
  // No wrap of items.
361
- if (options.no_wrap) {
379
+ if (options.noWrap) {
362
380
  if (target >= dim * (count - 1)) {
363
381
  target = dim * (count - 1);
364
382
  } else if (target < 0) {
@@ -387,8 +405,17 @@
387
405
  });
388
406
 
389
407
 
390
-
391
- window.onresize = scroll;
408
+ $(window).on('resize.carousel', function() {
409
+ if (options.fullWidth) {
410
+ item_width = view.find('.carousel-item').first().innerWidth();
411
+ item_height = view.find('.carousel-item').first().innerHeight();
412
+ dim = item_width * 2 + options.padding;
413
+ offset = center * 2 * item_width;
414
+ target = offset;
415
+ } else {
416
+ scroll();
417
+ }
418
+ });
392
419
 
393
420
  setupEvents();
394
421
  scroll(offset);
@@ -397,7 +424,7 @@
397
424
  if (n === undefined) {
398
425
  n = 1;
399
426
  }
400
- target = offset + dim * n;
427
+ target = (dim * Math.round(offset / dim)) + (dim * n);
401
428
  if (offset !== target) {
402
429
  amplitude = target - offset;
403
430
  timestamp = Date.now();
@@ -409,7 +436,7 @@
409
436
  if (n === undefined) {
410
437
  n = 1;
411
438
  }
412
- target = offset - dim * n;
439
+ target = (dim * Math.round(offset / dim)) - (dim * n);
413
440
  if (offset !== target) {
414
441
  amplitude = target - offset;
415
442
  timestamp = Date.now();
@@ -10,7 +10,7 @@
10
10
  return;
11
11
  }
12
12
 
13
- var itHasLengthAttribute = $input.attr('length') !== undefined;
13
+ var itHasLengthAttribute = $input.attr('data-length') !== undefined;
14
14
 
15
15
  if(itHasLengthAttribute){
16
16
  $input.on('input', updateCounter);
@@ -24,7 +24,7 @@
24
24
  };
25
25
 
26
26
  function updateCounter(){
27
- var maxLength = +$(this).attr('length'),
27
+ var maxLength = +$(this).attr('data-length'),
28
28
  actualLength = +$(this).val().length,
29
29
  isValidLength = actualLength <= maxLength;
30
30
 
@@ -1,9 +1,10 @@
1
1
  (function ($) {
2
- var chipsHandleEvents = false;
3
2
  var materialChipsDefaults = {
4
3
  data: [],
5
4
  placeholder: '',
6
5
  secondaryPlaceholder: '',
6
+ autocompleteData: {},
7
+ autocompleteLimit: Infinity,
7
8
  };
8
9
 
9
10
  $(document).ready(function() {
@@ -34,7 +35,7 @@
34
35
  }
35
36
 
36
37
  var curr_options = $.extend({}, materialChipsDefaults, options);
37
-
38
+ self.hasAutocomplete = !$.isEmptyObject(curr_options.autocompleteData);
38
39
 
39
40
  // Initialize
40
41
  this.init = function() {
@@ -43,6 +44,7 @@
43
44
  self.$el.each(function(){
44
45
  var $chips = $(this);
45
46
  var chipId = Materialize.guid();
47
+ self.chipId = chipId;
46
48
 
47
49
  if (!curr_options.data || !(curr_options.data instanceof Array)) {
48
50
  curr_options.data = [];
@@ -60,7 +62,7 @@
60
62
  });
61
63
  };
62
64
 
63
- this.handleEvents = function(){
65
+ this.handleEvents = function() {
64
66
  var SELS = self.SELS;
65
67
 
66
68
  self.$document.off('click.chips-focus', SELS.CHIPS).on('click.chips-focus', SELS.CHIPS, function(e){
@@ -68,8 +70,16 @@
68
70
  });
69
71
 
70
72
  self.$document.off('click.chips-select', SELS.CHIP).on('click.chips-select', SELS.CHIP, function(e){
71
- $(SELS.CHIP).removeClass('selected');
72
- $(this).toggleClass('selected');
73
+ var $chip = $(e.target);
74
+ if ($chip.length) {
75
+ var wasSelected = $chip.hasClass('selected');
76
+ var $chips = $chip.closest(SELS.CHIPS);
77
+ $(SELS.CHIP).removeClass('selected');
78
+
79
+ if (!wasSelected) {
80
+ self.selectChip($chip.index(), $chips);
81
+ }
82
+ }
73
83
  });
74
84
 
75
85
  self.$document.off('keydown.chips').on('keydown.chips', function(e){
@@ -153,6 +163,13 @@
153
163
 
154
164
  // enter
155
165
  if (13 === e.which) {
166
+ // Override enter if autocompleting.
167
+ if (self.hasAutocomplete &&
168
+ $chips.find('.autocomplete-content.dropdown-content').length &&
169
+ $chips.find('.autocomplete-content.dropdown-content').children().length) {
170
+ return;
171
+ }
172
+
156
173
  e.preventDefault();
157
174
  self.addChip({tag: $target.val()}, $chips);
158
175
  $target.val('');
@@ -160,7 +177,8 @@
160
177
  }
161
178
 
162
179
  // delete or left
163
- if ((8 === e.keyCode || 37 === e.keyCode) && '' === $target.val() && chipsLength) {
180
+ if ((8 === e.keyCode || 37 === e.keyCode) && '' === $target.val() && chipsLength) {
181
+ e.preventDefault();
164
182
  self.selectChip(chipsLength - 1, $chips);
165
183
  $target.blur();
166
184
  return;
@@ -196,6 +214,20 @@
196
214
  label.addClass('active');
197
215
  }
198
216
  }
217
+
218
+ // Setup autocomplete if needed.
219
+ var input = $('#' + chipId);
220
+ if (self.hasAutocomplete) {
221
+ input.autocomplete({
222
+ data: curr_options.autocompleteData,
223
+ limit: curr_options.autocompleteLimit,
224
+ onAutocomplete: function(val) {
225
+ self.addChip({tag: val}, $chips);
226
+ input.val('');
227
+ input.focus();
228
+ },
229
+ })
230
+ }
199
231
  };
200
232
 
201
233
  this.renderChip = function(elem) {
@@ -281,9 +313,6 @@
281
313
  // init
282
314
  this.init();
283
315
 
284
- if (!chipsHandleEvents) {
285
- this.handleEvents();
286
- chipsHandleEvents = true;
287
- }
316
+ this.handleEvents();
288
317
  };
289
- }( jQuery ));
318
+ }( jQuery ));
@@ -11,7 +11,7 @@
11
11
  var defaults = {
12
12
  inDuration: 300,
13
13
  outDuration: 225,
14
- constrain_width: true, // Constrains width of dropdown to the activator
14
+ constrainWidth: true, // Constrains width of dropdown to the activator
15
15
  hover: false,
16
16
  gutter: 0, // Spacing from edge
17
17
  belowOrigin: false,
@@ -49,7 +49,7 @@
49
49
  if (origin.data('outduration') !== undefined)
50
50
  curr_options.outDuration = origin.data('outduration');
51
51
  if (origin.data('constrainwidth') !== undefined)
52
- curr_options.constrain_width = origin.data('constrainwidth');
52
+ curr_options.constrainWidth = origin.data('constrainwidth');
53
53
  if (origin.data('hover') !== undefined)
54
54
  curr_options.hover = origin.data('hover');
55
55
  if (origin.data('gutter') !== undefined)
@@ -85,7 +85,7 @@
85
85
  origin.addClass('active');
86
86
 
87
87
  // Constrain width
88
- if (curr_options.constrain_width === true) {
88
+ if (curr_options.constrainWidth === true) {
89
89
  activates.css('width', origin.outerWidth());
90
90
 
91
91
  } else {
@@ -174,6 +174,14 @@
174
174
  }
175
175
  })
176
176
  .animate( {opacity: 1}, {queue: false, duration: curr_options.inDuration, easing: 'easeOutSine'});
177
+
178
+ // Add click close handler to document
179
+ $(document).bind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'), function (e) {
180
+ if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length) ) {
181
+ hideDropdown();
182
+ $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
183
+ }
184
+ });
177
185
  }
178
186
 
179
187
  function hideDropdown() {
@@ -182,6 +190,7 @@
182
190
  activates.fadeOut(curr_options.outDuration);
183
191
  activates.removeClass('active');
184
192
  origin.removeClass('active');
193
+ $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
185
194
  setTimeout(function() { activates.css('max-height', ''); }, curr_options.outDuration);
186
195
  }
187
196
 
@@ -235,15 +244,6 @@
235
244
  hideDropdown();
236
245
  $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
237
246
  }
238
- // If menu open, add click close handler to document
239
- if (activates.hasClass('active')) {
240
- $(document).bind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'), function (e) {
241
- if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length) ) {
242
- hideDropdown();
243
- $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
244
- }
245
- });
246
- }
247
247
  }
248
248
  });
249
249