fomantic-ui-sass 2.9.2 → 2.9.3.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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/Gemfile +2 -0
  4. data/Rakefile +2 -0
  5. data/app/assets/javascripts/semantic-ui/accordion.js +1 -5
  6. data/app/assets/javascripts/semantic-ui/api.js +22 -15
  7. data/app/assets/javascripts/semantic-ui/calendar.js +1 -6
  8. data/app/assets/javascripts/semantic-ui/checkbox.js +4 -6
  9. data/app/assets/javascripts/semantic-ui/dimmer.js +1 -5
  10. data/app/assets/javascripts/semantic-ui/dropdown.js +56 -33
  11. data/app/assets/javascripts/semantic-ui/embed.js +1 -6
  12. data/app/assets/javascripts/semantic-ui/flyout.js +40 -58
  13. data/app/assets/javascripts/semantic-ui/form.js +102 -53
  14. data/app/assets/javascripts/semantic-ui/modal.js +45 -33
  15. data/app/assets/javascripts/semantic-ui/nag.js +17 -9
  16. data/app/assets/javascripts/semantic-ui/popup.js +27 -19
  17. data/app/assets/javascripts/semantic-ui/progress.js +1 -6
  18. data/app/assets/javascripts/semantic-ui/rating.js +1 -5
  19. data/app/assets/javascripts/semantic-ui/search.js +4 -7
  20. data/app/assets/javascripts/semantic-ui/shape.js +1 -5
  21. data/app/assets/javascripts/semantic-ui/sidebar.js +15 -38
  22. data/app/assets/javascripts/semantic-ui/site.js +1 -1
  23. data/app/assets/javascripts/semantic-ui/slider.js +130 -34
  24. data/app/assets/javascripts/semantic-ui/state.js +23 -20
  25. data/app/assets/javascripts/semantic-ui/sticky.js +17 -16
  26. data/app/assets/javascripts/semantic-ui/tab.js +18 -8
  27. data/app/assets/javascripts/semantic-ui/toast.js +17 -9
  28. data/app/assets/javascripts/semantic-ui/transition.js +2 -6
  29. data/app/assets/javascripts/semantic-ui/visibility.js +15 -6
  30. data/app/assets/stylesheets/semantic-ui/collections/_breadcrumb.scss +1 -1
  31. data/app/assets/stylesheets/semantic-ui/collections/_form.scss +53 -20
  32. data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +107 -107
  33. data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +13 -7
  34. data/app/assets/stylesheets/semantic-ui/collections/_message.scss +1 -1
  35. data/app/assets/stylesheets/semantic-ui/collections/_table.scss +65 -1
  36. data/app/assets/stylesheets/semantic-ui/elements/_button.scss +2 -2
  37. data/app/assets/stylesheets/semantic-ui/elements/_container.scss +62 -1
  38. data/app/assets/stylesheets/semantic-ui/elements/_divider.scss +1 -1
  39. data/app/assets/stylesheets/semantic-ui/elements/_emoji.scss +697 -249
  40. data/app/assets/stylesheets/semantic-ui/elements/_flag.scss +3 -2
  41. data/app/assets/stylesheets/semantic-ui/elements/_header.scss +1 -1
  42. data/app/assets/stylesheets/semantic-ui/elements/_icon.scss +62 -62
  43. data/app/assets/stylesheets/semantic-ui/elements/_image.scss +1 -1
  44. data/app/assets/stylesheets/semantic-ui/elements/_input.scss +3 -27
  45. data/app/assets/stylesheets/semantic-ui/elements/_label.scss +21 -2
  46. data/app/assets/stylesheets/semantic-ui/elements/_list.scss +13 -13
  47. data/app/assets/stylesheets/semantic-ui/elements/_loader.scss +282 -282
  48. data/app/assets/stylesheets/semantic-ui/elements/_placeholder.scss +1 -1
  49. data/app/assets/stylesheets/semantic-ui/elements/_rail.scss +1 -1
  50. data/app/assets/stylesheets/semantic-ui/elements/_reveal.scss +1 -1
  51. data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +161 -34
  52. data/app/assets/stylesheets/semantic-ui/elements/_step.scss +1 -1
  53. data/app/assets/stylesheets/semantic-ui/elements/_text.scss +1 -1
  54. data/app/assets/stylesheets/semantic-ui/globals/_reset.scss +1 -1
  55. data/app/assets/stylesheets/semantic-ui/globals/_site.scss +1 -1
  56. data/app/assets/stylesheets/semantic-ui/modules/_accordion.scss +1 -1
  57. data/app/assets/stylesheets/semantic-ui/modules/_calendar.scss +145 -8
  58. data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +50 -6
  59. data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +3 -3
  60. data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +119 -26
  61. data/app/assets/stylesheets/semantic-ui/modules/_embed.scss +1 -1
  62. data/app/assets/stylesheets/semantic-ui/modules/_flyout.scss +1 -1
  63. data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +10 -3
  64. data/app/assets/stylesheets/semantic-ui/modules/_nag.scss +1 -1
  65. data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +41 -40
  66. data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +1 -1
  67. data/app/assets/stylesheets/semantic-ui/modules/_rating.scss +1 -1
  68. data/app/assets/stylesheets/semantic-ui/modules/_search.scss +26 -1
  69. data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +1 -1
  70. data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +1 -1
  71. data/app/assets/stylesheets/semantic-ui/modules/_slider.scss +1 -1
  72. data/app/assets/stylesheets/semantic-ui/modules/_sticky.scss +1 -1
  73. data/app/assets/stylesheets/semantic-ui/modules/_tab.scss +1 -1
  74. data/app/assets/stylesheets/semantic-ui/modules/_toast.scss +6 -1
  75. data/app/assets/stylesheets/semantic-ui/modules/_transition.scss +1 -1
  76. data/app/assets/stylesheets/semantic-ui/views/_ad.scss +1 -1
  77. data/app/assets/stylesheets/semantic-ui/views/_card.scss +1 -1
  78. data/app/assets/stylesheets/semantic-ui/views/_comment.scss +6 -1
  79. data/app/assets/stylesheets/semantic-ui/views/_feed.scss +486 -5
  80. data/app/assets/stylesheets/semantic-ui/views/_item.scss +6 -1
  81. data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +1 -1
  82. data/app/helpers/semantic_breadcrumbs_helper.rb +2 -0
  83. data/app/helpers/semantic_flash_helper.rb +2 -0
  84. data/app/helpers/semantic_icon_helper.rb +2 -0
  85. data/fomantic-ui-sass.gemspec +4 -2
  86. data/gemfiles/rails_5.0.gemfile +2 -0
  87. data/gemfiles/rails_5.1.gemfile +2 -0
  88. data/gemfiles/rails_5.2.gemfile +2 -0
  89. data/lib/fomantic/ui/sass/breadcrumbs.rb +2 -0
  90. data/lib/fomantic/ui/sass/engine.rb +5 -3
  91. data/lib/fomantic/ui/sass/version.rb +4 -2
  92. data/lib/fomantic-ui-sass.rb +2 -6
  93. data/spec/dummy/Rakefile +2 -0
  94. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  95. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  96. data/spec/dummy/bin/bundle +2 -0
  97. data/spec/dummy/bin/rails +2 -0
  98. data/spec/dummy/bin/rake +2 -0
  99. data/spec/dummy/config/application.rb +3 -1
  100. data/spec/dummy/config/boot.rb +2 -0
  101. data/spec/dummy/config/environment.rb +2 -0
  102. data/spec/dummy/config/environments/development.rb +3 -1
  103. data/spec/dummy/config/environments/production.rb +2 -0
  104. data/spec/dummy/config/environments/test.rb +3 -1
  105. data/spec/dummy/config/initializers/backtrace_silencers.rb +2 -0
  106. data/spec/dummy/config/initializers/filter_parameter_logging.rb +2 -0
  107. data/spec/dummy/config/initializers/inflections.rb +2 -0
  108. data/spec/dummy/config/initializers/mime_types.rb +2 -0
  109. data/spec/dummy/config/initializers/secret_token.rb +2 -0
  110. data/spec/dummy/config/initializers/session_store.rb +2 -0
  111. data/spec/dummy/config/initializers/wrap_parameters.rb +2 -0
  112. data/spec/dummy/config/routes.rb +2 -0
  113. data/spec/dummy/config.ru +3 -1
  114. data/spec/helpers/semantic_breadcrumbs_helper_spec.rb +2 -0
  115. data/spec/helpers/semantic_flash_helper_spec.rb +2 -0
  116. data/spec/helpers/semantic_icon_helper_spec.rb +2 -0
  117. data/spec/spec_helper.rb +2 -0
  118. data/tasks/converter.rb +9 -19
  119. data/templates/project/manifest.rb +2 -0
  120. metadata +12 -26
@@ -28,15 +28,25 @@
28
28
  $html = $('html'),
29
29
  $head = $('head'),
30
30
 
31
- moduleSelector = $allModules.selector || '',
32
-
33
31
  time = Date.now(),
34
32
  performance = [],
35
33
 
36
34
  query = arguments[0],
37
35
  methodInvoked = typeof query === 'string',
38
36
  queryArguments = [].slice.call(arguments, 1),
37
+ contextCheck = function (context, win) {
38
+ var $context;
39
+ if ([window, document].indexOf(context) >= 0) {
40
+ $context = $body;
41
+ } else {
42
+ $context = $(win.document).find(context);
43
+ if ($context.length === 0) {
44
+ $context = win.frameElement ? contextCheck(context, win.parent) : $body;
45
+ }
46
+ }
39
47
 
48
+ return $context;
49
+ },
40
50
  returnedValue;
41
51
 
42
52
  $allModules.each(function () {
@@ -55,7 +65,7 @@
55
65
  moduleNamespace = 'module-' + namespace,
56
66
 
57
67
  $module = $(this),
58
- $context = [window, document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $body,
68
+ $context = contextCheck(settings.context, window),
59
69
  isBody = $context[0] === $body[0],
60
70
 
61
71
  $sidebars = $module.children(selector.sidebar),
@@ -119,9 +129,6 @@
119
129
  .off(eventNamespace)
120
130
  .removeData(moduleNamespace)
121
131
  ;
122
- if (module.is.ios()) {
123
- module.remove.ios();
124
- }
125
132
  // bound by uuid
126
133
  $context.off(elementNamespace);
127
134
  $window.off(elementNamespace);
@@ -277,7 +284,7 @@
277
284
 
278
285
  refresh: function () {
279
286
  module.verbose('Refreshing selector cache');
280
- $context = [window, document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $body;
287
+ $context = contextCheck(settings.context, window);
281
288
  module.refreshSidebars();
282
289
  $pusher = $context.children(selector.pusher);
283
290
  $fixed = $context.children(selector.fixed);
@@ -585,11 +592,6 @@
585
592
  $pusher.removeClass(className.blurring);
586
593
  }
587
594
  },
588
- // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios
589
- // (This is no longer necessary in latest iOS)
590
- ios: function () {
591
- $html.addClass(className.ios);
592
- },
593
595
 
594
596
  // container
595
597
  pushed: function () {
@@ -638,11 +640,6 @@
638
640
  }
639
641
  },
640
642
 
641
- // ios scroll on html not document
642
- ios: function () {
643
- $html.removeClass(className.ios);
644
- },
645
-
646
643
  // context
647
644
  pushed: function () {
648
645
  $context.removeClass(className.pushed);
@@ -762,20 +759,6 @@
762
759
  return module.cache.isIE;
763
760
  },
764
761
 
765
- ios: function () {
766
- var
767
- userAgent = navigator.userAgent,
768
- isIOS = userAgent.match(regExp.ios),
769
- isMobileChrome = userAgent.match(regExp.mobileChrome)
770
- ;
771
- if (isIOS && !isMobileChrome) {
772
- module.verbose('Browser was found to be iOS', userAgent);
773
-
774
- return true;
775
- }
776
-
777
- return false;
778
- },
779
762
  mobile: function () {
780
763
  var
781
764
  userAgent = navigator.userAgent,
@@ -888,7 +871,7 @@
888
871
  });
889
872
  }
890
873
  clearTimeout(module.performance.timer);
891
- module.performance.timer = setTimeout(module.performance.display, 500);
874
+ module.performance.timer = setTimeout(function () { module.performance.display(); }, 500);
892
875
  },
893
876
  display: function () {
894
877
  var
@@ -901,9 +884,6 @@
901
884
  totalTime += data['Execution Time'];
902
885
  });
903
886
  title += ' ' + totalTime + 'ms';
904
- if (moduleSelector) {
905
- title += ' \'' + moduleSelector + '\'';
906
- }
907
887
  if (performance.length > 0) {
908
888
  console.groupCollapsed(title);
909
889
  if (console.table) {
@@ -1038,7 +1018,6 @@
1038
1018
  blurring: 'blurring',
1039
1019
  closing: 'closing',
1040
1020
  dimmed: 'dimmed',
1041
- ios: 'ios',
1042
1021
  locked: 'locked',
1043
1022
  pushable: 'pushable',
1044
1023
  pushed: 'pushed',
@@ -1058,8 +1037,6 @@
1058
1037
  },
1059
1038
 
1060
1039
  regExp: {
1061
- ios: /(iPad|iPhone|iPod)/g,
1062
- mobileChrome: /(CriOS)/g,
1063
1040
  mobile: /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g,
1064
1041
  },
1065
1042
 
@@ -292,7 +292,7 @@
292
292
  });
293
293
  }
294
294
  clearTimeout(module.performance.timer);
295
- module.performance.timer = setTimeout(module.performance.display, 500);
295
+ module.performance.timer = setTimeout(function () { module.performance.display(); }, 500);
296
296
  },
297
297
  display: function () {
298
298
  var
@@ -25,8 +25,6 @@
25
25
  $document = $(document),
26
26
  $window = $(window),
27
27
 
28
- moduleSelector = $allModules.selector || '',
29
-
30
28
  time = Date.now(),
31
29
  performance = [],
32
30
 
@@ -105,9 +103,7 @@
105
103
  module.setup.layout();
106
104
  module.setup.labels();
107
105
 
108
- if (!module.is.disabled()) {
109
- module.bind.events();
110
- }
106
+ module.bind.events();
111
107
 
112
108
  module.read.metadata();
113
109
  module.read.settings();
@@ -139,20 +135,32 @@
139
135
  $module.attr('tabindex', 0);
140
136
  }
141
137
  if ($module.find('.inner').length === 0) {
142
- $module.append("<div class='inner'>"
143
- + "<div class='track'></div>"
144
- + "<div class='track-fill'></div>"
145
- + "<div class='thumb'></div>"
138
+ $module.append('<div class="inner">'
139
+ + '<div class="track"></div>'
140
+ + '<div class="track-fill"></div>'
141
+ + '<div class="thumb"></div>'
146
142
  + '</div>');
147
143
  }
148
144
  precision = module.get.precision();
149
145
  $thumb = $module.find('.thumb:not(.second)');
146
+ if (settings.showThumbTooltip) {
147
+ $thumb
148
+ .attr('data-position', settings.tooltipConfig.position)
149
+ .attr('data-variation', settings.tooltipConfig.variation)
150
+ ;
151
+ }
150
152
  $currThumb = $thumb;
151
153
  if (module.is.range()) {
152
154
  if ($module.find('.thumb.second').length === 0) {
153
- $module.find('.inner').append("<div class='thumb second'></div>");
155
+ $module.find('.inner').append('<div class="thumb second"></div>');
154
156
  }
155
157
  $secondThumb = $module.find('.thumb.second');
158
+ if (settings.showThumbTooltip) {
159
+ $secondThumb
160
+ .attr('data-position', settings.tooltipConfig.position)
161
+ .attr('data-variation', settings.tooltipConfig.variation)
162
+ ;
163
+ }
156
164
  }
157
165
  $track = $module.find('.track');
158
166
  $trackFill = $module.find('.track-fill');
@@ -206,9 +214,10 @@
206
214
  for (var i = 0, len = module.get.numLabels(); i <= len; i++) {
207
215
  var
208
216
  labelText = module.get.label(i),
209
- $label = labelText !== ''
217
+ showLabel = settings.restrictedLabels.length === 0 || settings.restrictedLabels.indexOf(labelText) >= 0,
218
+ $label = labelText !== '' && (showLabel || settings.showLabelTicks === 'always')
210
219
  ? (!(i % module.get.gapRatio())
211
- ? $('<li class="label">' + labelText + '</li>')
220
+ ? $('<li class="label">' + (showLabel ? labelText : '') + '</li>')
212
221
  : $('<li class="halftick label"></li>'))
213
222
  : null,
214
223
  ratio = i / len
@@ -352,6 +361,18 @@
352
361
  ;
353
362
  $currThumb = initialPosition > newPos ? $thumb : $secondThumb;
354
363
  }
364
+ if (module.is.range() && (settings.minRange || settings.maxRange)) {
365
+ var currentRangeDiff = module.get.currentRangeDiff(value),
366
+ isSecondThumb = $currThumb.hasClass('second')
367
+ ;
368
+ if ((settings.minRange && currentRangeDiff < settings.minRange)
369
+ || (settings.maxRange && currentRangeDiff > settings.maxRange)
370
+ || (settings.preventCrossover && !isSecondThumb && value > module.secondThumbVal)
371
+ || (settings.preventCrossover && isSecondThumb && value < module.thumbVal)
372
+ ) {
373
+ return;
374
+ }
375
+ }
355
376
  if (module.get.step() === 0 || module.is.smooth()) {
356
377
  var
357
378
  thumbVal = module.thumbVal,
@@ -387,6 +408,17 @@
387
408
  return;
388
409
  }
389
410
  var value = module.determine.valueFromEvent(event);
411
+ if (module.is.range() && (settings.minRange || settings.maxRange)) {
412
+ if ($currThumb === undefined) {
413
+ $currThumb = value <= module.get.currentThumbValue() ? $thumb : $secondThumb;
414
+ }
415
+ var currentRangeDiff = module.get.currentRangeDiff(value);
416
+ if (settings.minRange && currentRangeDiff < settings.minRange) {
417
+ value = module.get.edgeValue(value, settings.minRange);
418
+ } else if (settings.maxRange && currentRangeDiff > settings.maxRange) {
419
+ value = module.get.edgeValue(value, settings.maxRange);
420
+ }
421
+ }
390
422
  module.set.value(value);
391
423
  module.unbind.slidingEvents();
392
424
  touchIdentifier = undefined;
@@ -403,6 +435,9 @@
403
435
  }
404
436
  },
405
437
  keydown: function (event, first) {
438
+ if (module.is.disabled()) {
439
+ return;
440
+ }
406
441
  if (settings.preventCrossover && module.is.range() && module.thumbVal === module.secondThumbVal) {
407
442
  $currThumb = undefined;
408
443
  }
@@ -439,7 +474,7 @@
439
474
  }
440
475
  },
441
476
  activateFocus: function (event) {
442
- if (!module.is.focused() && module.is.hover() && module.determine.keyMovement(event) !== NO_STEP) {
477
+ if (!module.is.disabled() && !module.is.focused() && module.is.hover() && module.determine.keyMovement(event) !== NO_STEP) {
443
478
  event.preventDefault();
444
479
  module.event.keydown(event, true);
445
480
  $module.trigger('focus');
@@ -504,7 +539,13 @@
504
539
 
505
540
  is: {
506
541
  range: function () {
507
- return $module.hasClass(settings.className.range);
542
+ var isRange = $module.hasClass(className.range);
543
+ if (!isRange && (settings.minRange || settings.maxRange)) {
544
+ $module.addClass(className.range);
545
+ isRange = true;
546
+ }
547
+
548
+ return isRange;
508
549
  },
509
550
  hover: function () {
510
551
  return isHover;
@@ -513,23 +554,56 @@
513
554
  return $module.is(':focus');
514
555
  },
515
556
  disabled: function () {
516
- return $module.hasClass(settings.className.disabled);
557
+ return $module.hasClass(className.disabled);
517
558
  },
518
559
  labeled: function () {
519
- return $module.hasClass(settings.className.labeled);
560
+ var isLabeled = $module.hasClass(className.labeled);
561
+ if (!isLabeled && (settings.restrictedLabels.length > 0 || settings.showLabelTicks !== false)) {
562
+ $module.addClass(className.labeled);
563
+ isLabeled = true;
564
+ }
565
+
566
+ return isLabeled;
520
567
  },
521
568
  reversed: function () {
522
- return $module.hasClass(settings.className.reversed);
569
+ return $module.hasClass(className.reversed);
523
570
  },
524
571
  vertical: function () {
525
- return $module.hasClass(settings.className.vertical);
572
+ return $module.hasClass(className.vertical);
526
573
  },
527
574
  smooth: function () {
528
- return settings.smooth || $module.hasClass(settings.className.smooth);
575
+ return settings.smooth || $module.hasClass(className.smooth);
529
576
  },
530
577
  },
531
578
 
532
579
  get: {
580
+ currentRangeDiff: function (value) {
581
+ var currentRangeDiff;
582
+ if ($currThumb.hasClass('second')) {
583
+ currentRangeDiff = module.thumbVal < value
584
+ ? value - module.thumbVal
585
+ : module.thumbVal - value;
586
+ } else {
587
+ currentRangeDiff = module.secondThumbVal > value
588
+ ? module.secondThumbVal - value
589
+ : value - module.secondThumbVal;
590
+ }
591
+
592
+ return currentRangeDiff;
593
+ },
594
+ edgeValue: function (value, edgeValue) {
595
+ if ($currThumb.hasClass('second')) {
596
+ value = module.thumbVal < value
597
+ ? module.thumbVal + edgeValue
598
+ : module.thumbVal - edgeValue;
599
+ } else {
600
+ value = module.secondThumbVal < value
601
+ ? module.secondThumbVal + edgeValue
602
+ : module.secondThumbVal - edgeValue;
603
+ }
604
+
605
+ return value;
606
+ },
533
607
  trackOffset: function () {
534
608
  if (module.is.vertical()) {
535
609
  return $track.offset().top;
@@ -600,7 +674,8 @@
600
674
  var
601
675
  step = module.get.step(),
602
676
  min = module.get.min(),
603
- quotient = step === 0 ? 0 : Math.floor((settings.max - min) / step),
677
+ precision = module.get.precision(),
678
+ quotient = step === 0 ? 0 : Math.floor(Math.round(((settings.max - min) / step) * precision) / precision),
604
679
  remainder = step === 0 ? 0 : (settings.max - min) % step
605
680
  ;
606
681
 
@@ -610,7 +685,9 @@
610
685
  return settings.step;
611
686
  },
612
687
  numLabels: function () {
613
- var value = Math.round((module.get.max() - module.get.min()) / (module.get.step() === 0 ? 1 : module.get.step()));
688
+ var step = module.get.step(),
689
+ precision = module.get.precision(),
690
+ value = Math.round(((module.get.max() - module.get.min()) / (step === 0 ? 1 : step)) * precision) / precision;
614
691
  module.debug('Determined that there should be ' + value + ' labels');
615
692
 
616
693
  return value;
@@ -625,7 +702,9 @@
625
702
 
626
703
  switch (settings.labelType) {
627
704
  case settings.labelTypes.number: {
628
- return Math.round(((value * (module.get.step() === 0 ? 1 : module.get.step())) + module.get.min()) * precision) / precision;
705
+ var step = module.get.step();
706
+
707
+ return Math.round(((value * (step === 0 ? 1 : step)) + module.get.min()) * precision) / precision;
629
708
  }
630
709
  case settings.labelTypes.letter: {
631
710
  return alphabet[value % 26];
@@ -733,13 +812,10 @@
733
812
  return thumbDelta <= secondThumbDelta ? thumbPos : secondThumbPos;
734
813
  },
735
814
  thumbPos: function ($element) {
736
- var
737
- pos = module.is.vertical()
738
- ? (module.is.reversed() ? $element.css('bottom') : $element.css('top'))
739
- : (module.is.reversed() ? $element.css('right') : $element.css('left'))
815
+ return module.is.vertical()
816
+ ? (module.is.reversed() ? $element.css('bottom') : $element.css('top'))
817
+ : (module.is.reversed() ? $element.css('right') : $element.css('left'))
740
818
  ;
741
-
742
- return pos;
743
819
  },
744
820
  positionFromValue: function (val) {
745
821
  var
@@ -763,6 +839,7 @@
763
839
  position = Math.round(ratio * trackLength),
764
840
  adjustedPos = step === 0 ? position : Math.round(position / step) * step
765
841
  ;
842
+ module.verbose('Determined position: ' + position + ' from ratio: ' + ratio);
766
843
 
767
844
  return adjustedPos;
768
845
  },
@@ -986,12 +1063,12 @@
986
1063
  }
987
1064
  if (!$currThumb.hasClass('second')) {
988
1065
  if (settings.preventCrossover && module.is.range()) {
989
- newValue = Math.min(module.secondThumbVal, newValue);
1066
+ newValue = Math.min(module.secondThumbVal - (settings.minRange || 0), newValue);
990
1067
  }
991
1068
  module.thumbVal = newValue;
992
1069
  } else {
993
1070
  if (settings.preventCrossover && module.is.range()) {
994
- newValue = Math.max(module.thumbVal, newValue);
1071
+ newValue = Math.max(module.thumbVal + (settings.minRange || 0), newValue);
995
1072
  }
996
1073
  module.secondThumbVal = newValue;
997
1074
  }
@@ -1010,6 +1087,10 @@
1010
1087
  thumbVal = module.thumbVal || module.get.min(),
1011
1088
  secondThumbVal = module.secondThumbVal || module.get.min()
1012
1089
  ;
1090
+ if (settings.showThumbTooltip) {
1091
+ var precision = module.get.precision();
1092
+ $targetThumb.attr('data-tooltip', Math.round(newValue * precision) / precision);
1093
+ }
1013
1094
  if (module.is.range()) {
1014
1095
  if (!$targetThumb.hasClass('second')) {
1015
1096
  position = newPos;
@@ -1098,6 +1179,14 @@
1098
1179
  settings: function () {
1099
1180
  if (settings.start !== false) {
1100
1181
  if (module.is.range()) {
1182
+ var rangeDiff = settings.end - settings.start;
1183
+ if (rangeDiff < 0
1184
+ || (settings.minRange && rangeDiff < settings.minRange)
1185
+ || (settings.maxRange && rangeDiff > settings.maxRange)
1186
+ || (settings.minRange && settings.maxRange && settings.minRange > settings.maxRange)
1187
+ ) {
1188
+ module.error(error.invalidRanges, settings.start, settings.end, settings.minRange, settings.maxRange);
1189
+ }
1101
1190
  module.debug('Start position set from settings', settings.start, settings.end);
1102
1191
  module.set.rangeValue(settings.start, settings.end);
1103
1192
  } else {
@@ -1178,7 +1267,7 @@
1178
1267
  });
1179
1268
  }
1180
1269
  clearTimeout(module.performance.timer);
1181
- module.performance.timer = setTimeout(module.performance.display, 500);
1270
+ module.performance.timer = setTimeout(function () { module.performance.display(); }, 500);
1182
1271
  },
1183
1272
  display: function () {
1184
1273
  var
@@ -1191,9 +1280,6 @@
1191
1280
  totalTime += data['Execution Time'];
1192
1281
  });
1193
1282
  title += ' ' + totalTime + 'ms';
1194
- if (moduleSelector) {
1195
- title += ' \'' + moduleSelector + '\'';
1196
- }
1197
1283
  if (performance.length > 0) {
1198
1284
  console.groupCollapsed(title);
1199
1285
  if (console.table) {
@@ -1293,6 +1379,7 @@
1293
1379
  error: {
1294
1380
  method: 'The method you called is not defined.',
1295
1381
  notrange: 'This slider is not a range slider',
1382
+ invalidRanges: 'Invalid range settings (start/end/minRange/maxRange)',
1296
1383
  },
1297
1384
 
1298
1385
  metadata: {
@@ -1305,6 +1392,8 @@
1305
1392
  step: 1,
1306
1393
  start: 0,
1307
1394
  end: 20,
1395
+ minRange: false,
1396
+ maxRange: false,
1308
1397
  labelType: 'number',
1309
1398
  showLabelTicks: false,
1310
1399
  smooth: false,
@@ -1341,6 +1430,13 @@
1341
1430
  downArrow: 40,
1342
1431
  },
1343
1432
 
1433
+ restrictedLabels: [],
1434
+ showThumbTooltip: false,
1435
+ tooltipConfig: {
1436
+ position: 'top center',
1437
+ variation: 'tiny black',
1438
+ },
1439
+
1344
1440
  labelTypes: {
1345
1441
  number: 'number',
1346
1442
  letter: 'letter',
@@ -23,15 +23,25 @@
23
23
  var
24
24
  $allModules = $(this),
25
25
 
26
- moduleSelector = $allModules.selector || '',
27
-
28
26
  time = Date.now(),
29
27
  performance = [],
30
28
 
31
29
  query = arguments[0],
32
30
  methodInvoked = typeof query === 'string',
33
31
  queryArguments = [].slice.call(arguments, 1),
32
+ contextCheck = function (context, win) {
33
+ var $context;
34
+ if ([window, document].indexOf(context) >= 0) {
35
+ $context = $(context);
36
+ } else {
37
+ $context = $(win.document).find(context);
38
+ if ($context.length === 0) {
39
+ $context = win.frameElement ? contextCheck(context, win.parent) : window;
40
+ }
41
+ }
34
42
 
43
+ return $context;
44
+ },
35
45
  returnedValue
36
46
  ;
37
47
  $allModules.each(function () {
@@ -51,6 +61,7 @@
51
61
  moduleNamespace = namespace + '-module',
52
62
 
53
63
  $module = $(this),
64
+ $context = settings.context ? contextCheck(settings.context, window) : $module,
54
65
 
55
66
  element = this,
56
67
  instance = $module.data(moduleNamespace),
@@ -68,19 +79,11 @@
68
79
  }
69
80
 
70
81
  // bind events with delegated events
71
- if (settings.context && moduleSelector !== '') {
72
- ([window, document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context))
73
- .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)
74
- .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)
75
- .on(moduleSelector, 'click' + eventNamespace, module.toggle.state)
76
- ;
77
- } else {
78
- $module
79
- .on('mouseenter' + eventNamespace, module.change.text)
80
- .on('mouseleave' + eventNamespace, module.reset.text)
81
- .on('click' + eventNamespace, module.toggle.state)
82
- ;
83
- }
82
+ $context
83
+ .on('mouseenter' + eventNamespace, module.change.text)
84
+ .on('mouseleave' + eventNamespace, module.reset.text)
85
+ .on('click' + eventNamespace, module.toggle.state)
86
+ ;
84
87
  module.instantiate();
85
88
  },
86
89
 
@@ -94,8 +97,11 @@
94
97
 
95
98
  destroy: function () {
96
99
  module.verbose('Destroying previous module', instance);
97
- $module
100
+ $context
98
101
  .off(eventNamespace)
102
+ ;
103
+ $module
104
+ .removeData(metadata.storedText)
99
105
  .removeData(moduleNamespace)
100
106
  ;
101
107
  },
@@ -476,7 +482,7 @@
476
482
  });
477
483
  }
478
484
  clearTimeout(module.performance.timer);
479
- module.performance.timer = setTimeout(module.performance.display, 500);
485
+ module.performance.timer = setTimeout(function () { module.performance.display(); }, 500);
480
486
  },
481
487
  display: function () {
482
488
  var
@@ -489,9 +495,6 @@
489
495
  totalTime += data['Execution Time'];
490
496
  });
491
497
  title += ' ' + totalTime + 'ms';
492
- if (moduleSelector) {
493
- title += ' \'' + moduleSelector + '\'';
494
- }
495
498
  if (performance.length > 0) {
496
499
  console.groupCollapsed(title);
497
500
  if (console.table) {
@@ -23,7 +23,6 @@
23
23
  var
24
24
  $allModules = $(this),
25
25
  $document = $(document),
26
- moduleSelector = $allModules.selector || '',
27
26
 
28
27
  time = Date.now(),
29
28
  performance = [],
@@ -31,6 +30,19 @@
31
30
  query = arguments[0],
32
31
  methodInvoked = typeof query === 'string',
33
32
  queryArguments = [].slice.call(arguments, 1),
33
+ contextCheck = function (context, win) {
34
+ var $context;
35
+ if ([window, document].indexOf(context) >= 0) {
36
+ $context = $(context);
37
+ } else {
38
+ $context = $(win.document).find(context);
39
+ if ($context.length === 0) {
40
+ $context = win.frameElement ? contextCheck(context, win.parent) : window;
41
+ }
42
+ }
43
+
44
+ return $context;
45
+ },
34
46
  returnedValue
35
47
  ;
36
48
 
@@ -49,7 +61,7 @@
49
61
 
50
62
  $module = $(this),
51
63
  $window = $(window),
52
- $scroll = [window, document].indexOf(settings.scrollContext) < 0 ? $document.find(settings.scrollContext) : $(settings.scrollContext),
64
+ $scroll = contextCheck(settings.scrollContext, window),
53
65
  $container,
54
66
  $context,
55
67
 
@@ -127,19 +139,11 @@
127
139
  },
128
140
 
129
141
  determineContainer: function () {
130
- if (settings.container) {
131
- $container = [window, document].indexOf(settings.container) < 0 ? $document.find(settings.container) : $(settings.container);
132
- } else {
133
- $container = $module.offsetParent();
134
- }
142
+ $container = settings.container ? contextCheck(settings.container, window) : $module.offsetParent();
135
143
  },
136
144
 
137
145
  determineContext: function () {
138
- if (settings.context) {
139
- $context = [window, document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $(settings.context);
140
- } else {
141
- $context = $container;
142
- }
146
+ $context = settings.context ? contextCheck(settings.context, window) : $container;
143
147
  if ($context.length === 0) {
144
148
  module.error(error.invalidContext, settings.context, $module);
145
149
  }
@@ -742,7 +746,7 @@
742
746
  });
743
747
  }
744
748
  clearTimeout(module.performance.timer);
745
- module.performance.timer = setTimeout(module.performance.display, 0);
749
+ module.performance.timer = setTimeout(function () { module.performance.display(); }, 0);
746
750
  },
747
751
  display: function () {
748
752
  var
@@ -755,9 +759,6 @@
755
759
  totalTime += data['Execution Time'];
756
760
  });
757
761
  title += ' ' + totalTime + 'ms';
758
- if (moduleSelector) {
759
- title += ' \'' + moduleSelector + '\'';
760
- }
761
762
  if (performance.length > 0) {
762
763
  console.groupCollapsed(title);
763
764
  if (console.table) {