fomantic-ui-sass 2.7.8 → 2.8.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/app/assets/fonts/semantic-ui/brand-icons.eot +0 -0
  4. data/app/assets/fonts/semantic-ui/brand-icons.svg +83 -29
  5. data/app/assets/fonts/semantic-ui/brand-icons.ttf +0 -0
  6. data/app/assets/fonts/semantic-ui/brand-icons.woff +0 -0
  7. data/app/assets/fonts/semantic-ui/brand-icons.woff2 +0 -0
  8. data/app/assets/fonts/semantic-ui/icons.eot +0 -0
  9. data/app/assets/fonts/semantic-ui/icons.svg +59 -41
  10. data/app/assets/fonts/semantic-ui/icons.ttf +0 -0
  11. data/app/assets/fonts/semantic-ui/icons.woff +0 -0
  12. data/app/assets/fonts/semantic-ui/icons.woff2 +0 -0
  13. data/app/assets/fonts/semantic-ui/outline-icons.eot +0 -0
  14. data/app/assets/fonts/semantic-ui/outline-icons.svg +3 -3
  15. data/app/assets/fonts/semantic-ui/outline-icons.ttf +0 -0
  16. data/app/assets/fonts/semantic-ui/outline-icons.woff +0 -0
  17. data/app/assets/fonts/semantic-ui/outline-icons.woff2 +0 -0
  18. data/app/assets/javascripts/semantic-ui/api.js +1 -1
  19. data/app/assets/javascripts/semantic-ui/calendar.js +103 -27
  20. data/app/assets/javascripts/semantic-ui/checkbox.js +1 -1
  21. data/app/assets/javascripts/semantic-ui/dropdown.js +93 -71
  22. data/app/assets/javascripts/semantic-ui/form.js +69 -22
  23. data/app/assets/javascripts/semantic-ui/modal.js +104 -33
  24. data/app/assets/javascripts/semantic-ui/popup.js +10 -10
  25. data/app/assets/javascripts/semantic-ui/progress.js +10 -8
  26. data/app/assets/javascripts/semantic-ui/rating.js +35 -6
  27. data/app/assets/javascripts/semantic-ui/search.js +2 -2
  28. data/app/assets/javascripts/semantic-ui/sidebar.js +2 -3
  29. data/app/assets/javascripts/semantic-ui/slider.js +78 -29
  30. data/app/assets/javascripts/semantic-ui/tab.js +1 -1
  31. data/app/assets/javascripts/semantic-ui/toast.js +398 -122
  32. data/app/assets/stylesheets/semantic-ui/collections/_breadcrumb.scss +3 -3
  33. data/app/assets/stylesheets/semantic-ui/collections/_form.scss +779 -142
  34. data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +35 -35
  35. data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +101 -145
  36. data/app/assets/stylesheets/semantic-ui/collections/_message.scss +11 -11
  37. data/app/assets/stylesheets/semantic-ui/collections/_table.scss +1009 -208
  38. data/app/assets/stylesheets/semantic-ui/elements/_all.scss +1 -0
  39. data/app/assets/stylesheets/semantic-ui/elements/_button.scss +51 -81
  40. data/app/assets/stylesheets/semantic-ui/elements/_container.scss +12 -12
  41. data/app/assets/stylesheets/semantic-ui/elements/_divider.scss +35 -14
  42. data/app/assets/stylesheets/semantic-ui/elements/_emoji.scss +12309 -0
  43. data/app/assets/stylesheets/semantic-ui/elements/_header.scss +111 -66
  44. data/app/assets/stylesheets/semantic-ui/elements/_icon.scss +105 -34
  45. data/app/assets/stylesheets/semantic-ui/elements/_image.scss +28 -28
  46. data/app/assets/stylesheets/semantic-ui/elements/_input.scss +211 -62
  47. data/app/assets/stylesheets/semantic-ui/elements/_label.scss +20 -20
  48. data/app/assets/stylesheets/semantic-ui/elements/_list.scss +52 -51
  49. data/app/assets/stylesheets/semantic-ui/elements/_loader.scss +85 -91
  50. data/app/assets/stylesheets/semantic-ui/elements/_placeholder.scss +8 -8
  51. data/app/assets/stylesheets/semantic-ui/elements/_rail.scss +11 -11
  52. data/app/assets/stylesheets/semantic-ui/elements/_reveal.scss +31 -10
  53. data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +39 -39
  54. data/app/assets/stylesheets/semantic-ui/elements/_step.scss +16 -17
  55. data/app/assets/stylesheets/semantic-ui/elements/_text.scss +3 -3
  56. data/app/assets/stylesheets/semantic-ui/modules/_accordion.scss +6 -6
  57. data/app/assets/stylesheets/semantic-ui/modules/_calendar.scss +2 -2
  58. data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +15 -124
  59. data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +30 -30
  60. data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +183 -111
  61. data/app/assets/stylesheets/semantic-ui/modules/_embed.scss +12 -12
  62. data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +128 -30
  63. data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +105 -79
  64. data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +44 -26
  65. data/app/assets/stylesheets/semantic-ui/modules/_rating.scss +246 -21
  66. data/app/assets/stylesheets/semantic-ui/modules/_search.scss +16 -13
  67. data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +3 -2
  68. data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +12 -14
  69. data/app/assets/stylesheets/semantic-ui/modules/_slider.scss +20 -23
  70. data/app/assets/stylesheets/semantic-ui/modules/_tab.scss +2 -2
  71. data/app/assets/stylesheets/semantic-ui/modules/_toast.scss +542 -155
  72. data/app/assets/stylesheets/semantic-ui/views/_ad.scss +16 -16
  73. data/app/assets/stylesheets/semantic-ui/views/_card.scss +42 -17
  74. data/app/assets/stylesheets/semantic-ui/views/_comment.scss +9 -9
  75. data/app/assets/stylesheets/semantic-ui/views/_feed.scss +20 -5
  76. data/app/assets/stylesheets/semantic-ui/views/_item.scss +33 -12
  77. data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +60 -46
  78. data/fomantic-ui-sass.gemspec +2 -2
  79. data/lib/fomantic-ui-sass.rb +2 -2
  80. data/lib/fomantic/ui/sass/version.rb +2 -2
  81. data/spec/dummy/app/assets/config/manifest.js +0 -0
  82. metadata +12 -9
@@ -151,10 +151,12 @@ $.fn.progress = function(parameters) {
151
151
  module.update.progress(0);
152
152
  },
153
153
 
154
- complete: function() {
154
+ complete: function(keepState) {
155
155
  if(module.percent === undefined || module.percent < 100) {
156
156
  module.remove.progressPoll();
157
- module.set.percent(100);
157
+ if(keepState !== true){
158
+ module.set.percent(100);
159
+ }
158
160
  }
159
161
  },
160
162
 
@@ -647,14 +649,14 @@ $.fn.progress = function(parameters) {
647
649
  settings.onActive.call(element, module.value, module.total);
648
650
  });
649
651
  },
650
- success : function(text) {
652
+ success : function(text, keepState) {
651
653
  text = text || settings.text.success || settings.text.active;
652
654
  module.debug('Setting success state');
653
655
  $module.addClass(className.success);
654
656
  module.remove.active();
655
657
  module.remove.warning();
656
658
  module.remove.error();
657
- module.complete();
659
+ module.complete(keepState);
658
660
  if(settings.text.success) {
659
661
  text = settings.onLabelUpdate('success', text, module.value, module.total);
660
662
  module.set.label(text);
@@ -667,14 +669,14 @@ $.fn.progress = function(parameters) {
667
669
  settings.onSuccess.call(element, module.total);
668
670
  });
669
671
  },
670
- warning : function(text) {
672
+ warning : function(text, keepState) {
671
673
  text = text || settings.text.warning;
672
674
  module.debug('Setting warning state');
673
675
  $module.addClass(className.warning);
674
676
  module.remove.active();
675
677
  module.remove.success();
676
678
  module.remove.error();
677
- module.complete();
679
+ module.complete(keepState);
678
680
  text = settings.onLabelUpdate('warning', text, module.value, module.total);
679
681
  if(text) {
680
682
  module.set.label(text);
@@ -683,14 +685,14 @@ $.fn.progress = function(parameters) {
683
685
  settings.onWarning.call(element, module.value, module.total);
684
686
  });
685
687
  },
686
- error : function(text) {
688
+ error : function(text, keepState) {
687
689
  text = text || settings.text.error;
688
690
  module.debug('Setting error state');
689
691
  $module.addClass(className.error);
690
692
  module.remove.active();
691
693
  module.remove.success();
692
694
  module.remove.warning();
693
- module.complete();
695
+ module.complete(keepState);
694
696
  text = settings.onLabelUpdate('error', text, module.value, module.total);
695
697
  if(text) {
696
698
  module.set.label(text);
@@ -47,6 +47,7 @@ $.fn.rating = function(parameters) {
47
47
  className = settings.className,
48
48
  metadata = settings.metadata,
49
49
  selector = settings.selector,
50
+ cssVars = settings.cssVars,
50
51
 
51
52
  eventNamespace = '.' + namespace,
52
53
  moduleNamespace = 'module-' + namespace,
@@ -248,10 +249,17 @@ $.fn.rating = function(parameters) {
248
249
  set: {
249
250
  rating: function(rating) {
250
251
  var
251
- ratingIndex = (rating - 1 >= 0)
252
- ? (rating - 1)
253
- : 0,
254
- $activeIcon = $icon.eq(ratingIndex)
252
+ ratingIndex = Math.floor(
253
+ (rating - 1 >= 0)
254
+ ? (rating - 1)
255
+ : 0
256
+ ),
257
+ $activeIcon = $icon.eq(ratingIndex),
258
+ $partialActiveIcon = rating <= 1
259
+ ? $activeIcon
260
+ : $activeIcon.next()
261
+ ,
262
+ filledPercentage = (rating % 1) * 100
255
263
  ;
256
264
  $module
257
265
  .removeClass(className.selected)
@@ -259,14 +267,30 @@ $.fn.rating = function(parameters) {
259
267
  $icon
260
268
  .removeClass(className.selected)
261
269
  .removeClass(className.active)
270
+ .removeClass(className.partiallyActive)
262
271
  ;
263
272
  if(rating > 0) {
264
273
  module.verbose('Setting current rating to', rating);
265
274
  $activeIcon
266
275
  .prevAll()
267
276
  .addBack()
268
- .addClass(className.active)
277
+ .addClass(className.active)
269
278
  ;
279
+ if($activeIcon.next() && rating % 1 !== 0) {
280
+ $partialActiveIcon
281
+ .addClass(className.partiallyActive)
282
+ .addClass(className.active)
283
+ ;
284
+ $partialActiveIcon
285
+ .css(cssVars.filledCustomPropName, filledPercentage + '%')
286
+ ;
287
+ if($partialActiveIcon.css('backgroundColor') === 'transparent') {
288
+ $partialActiveIcon
289
+ .removeClass(className.partiallyActive)
290
+ .removeClass(className.active)
291
+ ;
292
+ }
293
+ }
270
294
  }
271
295
  if(!module.is.initialLoad()) {
272
296
  settings.onRate.call(element, rating);
@@ -499,7 +523,12 @@ $.fn.rating.settings = {
499
523
  active : 'active',
500
524
  disabled : 'disabled',
501
525
  selected : 'selected',
502
- loading : 'loading'
526
+ loading : 'loading',
527
+ partiallyActive : 'partial'
528
+ },
529
+
530
+ cssVars : {
531
+ filledCustomPropName : '--full'
503
532
  },
504
533
 
505
534
  selector : {
@@ -1369,10 +1369,9 @@ $.fn.search.settings = {
1369
1369
  return string;
1370
1370
  }
1371
1371
  var
1372
- badChars = /[&<>"'`]/g,
1372
+ badChars = /[<>"'`]/g,
1373
1373
  shouldEscape = /[&<>"'`]/,
1374
1374
  escape = {
1375
- "&": "&amp;",
1376
1375
  "<": "&lt;",
1377
1376
  ">": "&gt;",
1378
1377
  '"': "&quot;",
@@ -1384,6 +1383,7 @@ $.fn.search.settings = {
1384
1383
  }
1385
1384
  ;
1386
1385
  if(shouldEscape.test(string)) {
1386
+ string = string.replace(/&(?![a-z0-9#]{1,6};)/, "&amp;");
1387
1387
  return string.replace(badChars, escapedChar);
1388
1388
  }
1389
1389
  return string;
@@ -318,8 +318,7 @@ $.fn.sidebar = function(parameters) {
318
318
  cache: function() {
319
319
  module.cache = {
320
320
  width : $module.outerWidth(),
321
- height : $module.outerHeight(),
322
- rtl : ($module.css('direction') == 'rtl')
321
+ height : $module.outerHeight()
323
322
  };
324
323
  },
325
324
  layout: function() {
@@ -761,7 +760,7 @@ $.fn.sidebar = function(parameters) {
761
760
  },
762
761
  rtl: function () {
763
762
  if(module.cache.rtl === undefined) {
764
- module.cache.rtl = ($module.css('direction') == 'rtl');
763
+ module.cache.rtl = $module.attr('dir') === 'rtl' || $module.css('direction') === 'rtl';
765
764
  }
766
765
  return module.cache.rtl;
767
766
  }
@@ -89,6 +89,8 @@ $.fn.slider = function(parameters) {
89
89
  isTouch,
90
90
  gapRatio = 1,
91
91
 
92
+ initialPosition,
93
+ initialLoad,
92
94
  module
93
95
  ;
94
96
 
@@ -96,6 +98,7 @@ $.fn.slider = function(parameters) {
96
98
 
97
99
  initialize: function() {
98
100
  module.debug('Initializing slider', settings);
101
+ initialLoad = true;
99
102
 
100
103
  currentRange += 1;
101
104
  documentEventID = currentRange;
@@ -111,6 +114,7 @@ $.fn.slider = function(parameters) {
111
114
  module.read.metadata();
112
115
  module.read.settings();
113
116
 
117
+ initialLoad = false;
114
118
  module.instantiate();
115
119
  },
116
120
 
@@ -313,31 +317,52 @@ $.fn.slider = function(parameters) {
313
317
  },
314
318
 
315
319
  event: {
316
- down: function(event, originalEvent) {
320
+ down: function(event) {
317
321
  event.preventDefault();
318
322
  if(module.is.range()) {
319
323
  var
320
- eventPos = module.determine.eventPos(event, originalEvent),
324
+ eventPos = module.determine.eventPos(event),
321
325
  newPos = module.determine.pos(eventPos)
322
326
  ;
323
- $currThumb = module.determine.closestThumb(newPos);
327
+ // Special handling if range mode and both thumbs have the same value
328
+ if(settings.preventCrossover && module.is.range() && module.thumbVal === module.secondThumbVal) {
329
+ initialPosition = newPos;
330
+ $currThumb = undefined;
331
+ } else {
332
+ $currThumb = module.determine.closestThumb(newPos);
333
+ }
324
334
  }
325
335
  if(!module.is.disabled()) {
326
336
  module.bind.slidingEvents();
327
337
  }
328
338
  },
329
- move: function(event, originalEvent) {
339
+ move: function(event) {
330
340
  event.preventDefault();
331
- var value = module.determine.valueFromEvent(event, originalEvent);
341
+ var value = module.determine.valueFromEvent(event);
342
+ if($currThumb === undefined) {
343
+ var
344
+ eventPos = module.determine.eventPos(event),
345
+ newPos = module.determine.pos(eventPos)
346
+ ;
347
+ $currThumb = initialPosition > newPos ? $thumb : $secondThumb;
348
+ }
332
349
  if(module.get.step() == 0 || module.is.smooth()) {
333
350
  var
334
351
  thumbVal = module.thumbVal,
335
352
  secondThumbVal = module.secondThumbVal,
336
- thumbSmoothVal = module.determine.smoothValueFromEvent(event, originalEvent)
353
+ thumbSmoothVal = module.determine.smoothValueFromEvent(event)
337
354
  ;
338
355
  if(!$currThumb.hasClass('second')) {
356
+ if(settings.preventCrossover && module.is.range()) {
357
+ value = Math.min(secondThumbVal, value);
358
+ thumbSmoothVal = Math.min(secondThumbVal, thumbSmoothVal);
359
+ }
339
360
  thumbVal = value;
340
361
  } else {
362
+ if(settings.preventCrossover && module.is.range()) {
363
+ value = Math.max(thumbVal, value);
364
+ thumbSmoothVal = Math.max(thumbVal, thumbSmoothVal);
365
+ }
341
366
  secondThumbVal = value;
342
367
  }
343
368
  value = Math.abs(thumbVal - (secondThumbVal || 0));
@@ -349,13 +374,16 @@ $.fn.slider = function(parameters) {
349
374
  });
350
375
  }
351
376
  },
352
- up: function(event, originalEvent) {
377
+ up: function(event) {
353
378
  event.preventDefault();
354
- var value = module.determine.valueFromEvent(event, originalEvent);
379
+ var value = module.determine.valueFromEvent(event);
355
380
  module.set.value(value);
356
381
  module.unbind.slidingEvents();
357
382
  },
358
383
  keydown: function(event, first) {
384
+ if(settings.preventCrossover && module.is.range() && module.thumbVal === module.secondThumbVal) {
385
+ $currThumb = undefined;
386
+ }
359
387
  if(module.is.focused()) {
360
388
  $(document).trigger(event);
361
389
  }
@@ -574,7 +602,7 @@ $.fn.slider = function(parameters) {
574
602
  return value;
575
603
  },
576
604
  currentThumbValue: function() {
577
- return $currThumb.hasClass('second') ? module.secondThumbVal : module.thumbVal;
605
+ return $currThumb !== undefined && $currThumb.hasClass('second') ? module.secondThumbVal : module.thumbVal;
578
606
  },
579
607
  thumbValue: function(which) {
580
608
  switch(which) {
@@ -615,22 +643,23 @@ $.fn.slider = function(parameters) {
615
643
  if( settings.autoAdjustLabels ) {
616
644
  var
617
645
  numLabels = module.get.numLabels(),
646
+ trackLength = module.get.trackLength(),
618
647
  gapCounter = 1
619
648
  ;
620
649
 
621
650
  // While the distance between two labels is too short,
622
651
  // we divide the number of labels at each iteration
623
652
  // and apply only if the modulo of the operation is an odd number.
624
- while ((module.get.trackLength() / numLabels) * gapCounter < settings.labelDistance) {
625
- if( !(numLabels % gapCounter) ) {
626
- gapRatio = gapCounter;
653
+ if(trackLength>0){
654
+ while ((trackLength / numLabels) * gapCounter < settings.labelDistance) {
655
+ if( !(numLabels % gapCounter) ) {
656
+ gapRatio = gapCounter;
657
+ }
658
+ gapCounter += 1;
627
659
  }
628
- gapCounter += 1;
629
660
  }
630
- return gapRatio;
631
- } else {
632
- return 1;
633
661
  }
662
+ return gapRatio;
634
663
  }
635
664
  },
636
665
 
@@ -650,6 +679,9 @@ $.fn.slider = function(parameters) {
650
679
  secondThumbPos = parseFloat(module.determine.thumbPos($secondThumb)),
651
680
  secondThumbDelta = Math.abs(eventPos - secondThumbPos)
652
681
  ;
682
+ if(thumbDelta === secondThumbDelta && module.get.thumbValue() === module.get.min()) {
683
+ return $secondThumb;
684
+ }
653
685
  return thumbDelta <= secondThumbDelta ? $thumb : $secondThumb;
654
686
  },
655
687
  closestThumbPos: function(eventPos) {
@@ -692,9 +724,9 @@ $.fn.slider = function(parameters) {
692
724
  ;
693
725
  return adjustedPos;
694
726
  },
695
- valueFromEvent: function(event, originalEvent) {
727
+ valueFromEvent: function(event) {
696
728
  var
697
- eventPos = module.determine.eventPos(event, originalEvent),
729
+ eventPos = module.determine.eventPos(event),
698
730
  newPos = module.determine.pos(eventPos),
699
731
  value
700
732
  ;
@@ -707,12 +739,12 @@ $.fn.slider = function(parameters) {
707
739
  }
708
740
  return value;
709
741
  },
710
- smoothValueFromEvent: function(event, originalEvent) {
742
+ smoothValueFromEvent: function(event) {
711
743
  var
712
744
  min = module.get.min(),
713
745
  max = module.get.max(),
714
746
  trackLength = module.get.trackLength(),
715
- eventPos = module.determine.eventPos(event, originalEvent),
747
+ eventPos = module.determine.eventPos(event),
716
748
  newPos = eventPos - module.get.trackOffset(),
717
749
  ratio,
718
750
  value
@@ -725,17 +757,19 @@ $.fn.slider = function(parameters) {
725
757
  value = ratio * (max - min) + min;
726
758
  return value;
727
759
  },
728
- eventPos: function(event, originalEvent) {
760
+ eventPos: function(event) {
729
761
  if(module.is.touch()) {
730
762
  var
731
- touchY = event.changedTouches[0].pageY || event.touches[0].pageY,
732
- touchX = event.changedTouches[0].pageX || event.touches[0].pageX
763
+ touchEvent = event.changedTouches ? event : event.originalEvent,
764
+ touches = touchEvent.changedTouches[0] ? touchEvent.changedTouches : touchEvent.touches,
765
+ touchY = touches[0].pageY,
766
+ touchX = touches[0].pageX
733
767
  ;
734
768
  return module.is.vertical() ? touchY : touchX;
735
769
  }
736
770
  var
737
- clickY = event.pageY || originalEvent.pageY,
738
- clickX = event.pageX || originalEvent.pageX
771
+ clickY = event.pageY || event.originalEvent.pageY,
772
+ clickX = event.pageX || event.originalEvent.pageX
739
773
  ;
740
774
  return module.is.vertical() ? clickY : clickX;
741
775
  },
@@ -822,8 +856,10 @@ $.fn.slider = function(parameters) {
822
856
  set: {
823
857
  value: function(newValue) {
824
858
  module.update.value(newValue, function(value, thumbVal, secondThumbVal) {
825
- settings.onChange.call(element, value, thumbVal, secondThumbVal);
826
- settings.onMove.call(element, value, thumbVal, secondThumbVal);
859
+ if (!initialLoad || settings.fireOnInit){
860
+ settings.onChange.call(element, value, thumbVal, secondThumbVal);
861
+ settings.onMove.call(element, value, thumbVal, secondThumbVal);
862
+ }
827
863
  });
828
864
  },
829
865
  rangeValue: function(first, second) {
@@ -847,8 +883,10 @@ $.fn.slider = function(parameters) {
847
883
  value = Math.abs(module.thumbVal - module.secondThumbVal);
848
884
  module.update.position(module.thumbVal, $thumb);
849
885
  module.update.position(module.secondThumbVal, $secondThumb);
850
- settings.onChange.call(element, value, module.thumbVal, module.secondThumbVal);
851
- settings.onMove.call(element, value, module.thumbVal, module.secondThumbVal);
886
+ if (!initialLoad || settings.fireOnInit) {
887
+ settings.onChange.call(element, value, module.thumbVal, module.secondThumbVal);
888
+ settings.onMove.call(element, value, module.thumbVal, module.secondThumbVal);
889
+ }
852
890
  } else {
853
891
  module.error(error.notrange);
854
892
  }
@@ -884,9 +922,18 @@ $.fn.slider = function(parameters) {
884
922
  value = newValue;
885
923
  module.thumbVal = value;
886
924
  } else {
925
+ if($currThumb === undefined) {
926
+ $currThumb = newValue <= module.get.currentThumbValue() ? $thumb : $secondThumb;
927
+ }
887
928
  if(!$currThumb.hasClass('second')) {
929
+ if(settings.preventCrossover && module.is.range()) {
930
+ newValue = Math.min(module.secondThumbVal, newValue);
931
+ }
888
932
  module.thumbVal = newValue;
889
933
  } else {
934
+ if(settings.preventCrossover && module.is.range()) {
935
+ newValue = Math.max(module.thumbVal, newValue);
936
+ }
890
937
  module.secondThumbVal = newValue;
891
938
  }
892
939
  value = Math.abs(module.thumbVal - module.secondThumbVal);
@@ -1222,6 +1269,8 @@ $.fn.slider.settings = {
1222
1269
  smooth : false,
1223
1270
  autoAdjustLabels : true,
1224
1271
  labelDistance : 100,
1272
+ preventCrossover : true,
1273
+ fireOnInit : false,
1225
1274
 
1226
1275
  //the decimal place to round to if step is undefined
1227
1276
  decimalPlaces : 2,
@@ -100,7 +100,7 @@ $.fn.tab = function(parameters) {
100
100
  initializedHistory = true;
101
101
  }
102
102
 
103
- if(module.determine.activeTab() == null) {
103
+ if(instance === undefined && module.determine.activeTab() == null) {
104
104
  module.debug('No active tab detected, setting first tab active', module.get.initialPath());
105
105
  module.changeTab(module.get.initialPath());
106
106
  };
@@ -43,27 +43,31 @@ $.fn.toast = function(parameters) {
43
43
  ? $.extend(true, {}, $.fn.toast.settings, parameters)
44
44
  : $.extend({}, $.fn.toast.settings),
45
45
 
46
- className = settings.className,
47
- selector = settings.selector,
48
- error = settings.error,
49
- namespace = settings.namespace,
50
-
51
- eventNamespace = '.' + namespace,
52
- moduleNamespace = namespace + '-module',
53
-
54
- $module = $(this),
55
- $toastBox = $('<div/>',{'class':settings.className.box}),
56
- $toast = $('<div/>'),
57
- $progress = $('<div/>',{'class':settings.className.progress+' '+settings.class}),
58
- $progressBar = $('<div/>',{'class':'bar'}),
59
-
60
- $close = $('<i/>',{'class':'close icon'}),
61
- $context = (settings.context)
46
+ className = settings.className,
47
+ selector = settings.selector,
48
+ error = settings.error,
49
+ namespace = settings.namespace,
50
+ fields = settings.fields,
51
+
52
+ eventNamespace = '.' + namespace,
53
+ moduleNamespace = namespace + '-module',
54
+
55
+ $module = $(this),
56
+ $toastBox,
57
+ $toast,
58
+ $actions,
59
+ $progress,
60
+ $progressBar,
61
+ $animationObject,
62
+ $close,
63
+ $context = (settings.context)
62
64
  ? $(settings.context)
63
65
  : $('body'),
64
66
 
65
- element = this,
66
- instance = $module.data(moduleNamespace),
67
+ isToastComponent = $module.hasClass('toast') || $module.hasClass('message') || $module.hasClass('card'),
68
+
69
+ element = this,
70
+ instance = isToastComponent ? $module.data(moduleNamespace) : undefined,
67
71
 
68
72
  module
69
73
  ;
@@ -71,34 +75,58 @@ $.fn.toast = function(parameters) {
71
75
 
72
76
  initialize: function() {
73
77
  module.verbose('Initializing element');
74
- if(typeof settings.showProgress !== 'string' || ['top','bottom'].indexOf(settings.showProgress) === -1 ) {
75
- settings.showProgress = false;
76
- }
77
78
  if (!module.has.container()) {
78
79
  module.create.container();
79
80
  }
80
-
81
- module.create.toast();
82
-
83
- module.bind.events();
84
-
85
- if(settings.displayTime > 0) {
86
- module.closeTimer = setTimeout(module.close, settings.displayTime+(!!settings.showProgress ? 300 : 0));
81
+ if(isToastComponent || settings.message !== '' || settings.title !== '' || module.get.iconClass() !== '' || settings.showImage || module.has.configActions()) {
82
+ if(typeof settings.showProgress !== 'string' || [className.top,className.bottom].indexOf(settings.showProgress) === -1 ) {
83
+ settings.showProgress = false;
84
+ }
85
+ module.create.toast();
86
+ if(settings.closeOnClick && (settings.closeIcon || $($toast).find(selector.input).length > 0 || module.has.configActions())){
87
+ settings.closeOnClick = false;
88
+ }
89
+ if(!settings.closeOnClick) {
90
+ $toastBox.addClass(className.unclickable);
91
+ }
92
+ module.bind.events();
93
+ }
94
+ module.instantiate();
95
+ if($toastBox) {
96
+ module.show();
87
97
  }
88
- module.show();
98
+ },
99
+
100
+ instantiate: function() {
101
+ module.verbose('Storing instance of toast');
102
+ instance = module;
103
+ $module
104
+ .data(moduleNamespace, instance)
105
+ ;
89
106
  },
90
107
 
91
108
  destroy: function() {
92
- module.debug('Removing toast', $toast);
93
- $toast.remove();
94
- $toast = undefined;
95
- settings.onRemove.call($toast, element);
109
+ if($toastBox) {
110
+ module.debug('Removing toast', $toastBox);
111
+ module.unbind.events();
112
+ $toastBox.remove();
113
+ $toastBox = undefined;
114
+ $toast = undefined;
115
+ $animationObject = undefined;
116
+ settings.onRemove.call($toastBox, element);
117
+ $progress = undefined;
118
+ $progressBar = undefined;
119
+ $close = undefined;
120
+ }
121
+ $module
122
+ .removeData(moduleNamespace)
123
+ ;
96
124
  },
97
125
 
98
126
  show: function(callback) {
99
127
  callback = callback || function(){};
100
128
  module.debug('Showing toast');
101
- if(settings.onShow.call($toast, element) === false) {
129
+ if(settings.onShow.call($toastBox, element) === false) {
102
130
  module.debug('onShow callback returned false, cancelling toast animation');
103
131
  return;
104
132
  }
@@ -106,9 +134,6 @@ $.fn.toast = function(parameters) {
106
134
  },
107
135
 
108
136
  close: function(callback) {
109
- if(module.closeTimer) {
110
- clearTimeout(module.closeTimer);
111
- }
112
137
  callback = callback || function(){};
113
138
  module.remove.visible();
114
139
  module.unbind.events();
@@ -119,74 +144,172 @@ $.fn.toast = function(parameters) {
119
144
  create: {
120
145
  container: function() {
121
146
  module.verbose('Creating container');
122
- $context.append('<div class="ui ' + settings.position + ' ' + className.container + '"></div>');
147
+ $context.append($('<div/>',{class: settings.position + ' ' + className.container}));
123
148
  },
124
149
  toast: function() {
125
- var $content = $('<div/>').addClass(className.content);
126
- module.verbose('Creating toast');
127
- if(settings.closeIcon) {
128
- $toast.append($close);
129
- $toast.css('cursor','default');
130
- }
150
+ $toastBox = $('<div/>', {class: className.box});
151
+ if (!isToastComponent) {
152
+ module.verbose('Creating toast');
153
+ $toast = $('<div/>');
154
+ var $content = $('<div/>', {class: className.content});
155
+ var iconClass = module.get.iconClass();
156
+ if (iconClass !== '') {
157
+ $toast.append($('<i/>', {class: iconClass + ' ' + className.icon}));
158
+ }
159
+
160
+ if (settings.showImage) {
161
+ $toast.append($('<img>', {
162
+ class: className.image + ' ' + settings.classImage,
163
+ src: settings.showImage
164
+ }));
165
+ }
166
+ if (settings.title !== '') {
167
+ $content.append($('<div/>', {
168
+ class: className.title,
169
+ text: settings.title
170
+ }));
171
+ }
131
172
 
132
- var iconClass = typeof settings.showIcon === 'string' ? settings.showIcon : settings.showIcon && settings.icons[settings.class] ? settings.icons[settings.class] : '';
133
- if (iconClass != '') {
134
- var $icon = $('<i/>').addClass(iconClass + ' ' + className.icon);
173
+ $content.append($('<div/>', {html: module.helpers.escape(settings.message, settings.preserveHTML)}));
135
174
 
136
175
  $toast
137
- .addClass(className.icon)
138
- .append($icon)
176
+ .addClass(settings.class + ' ' + className.toast)
177
+ .append($content)
139
178
  ;
179
+ $toast.css('opacity', settings.opacity);
180
+ if (settings.closeIcon) {
181
+ $close = $('<i/>', {class: className.close + ' ' + (typeof settings.closeIcon === 'string' ? settings.closeIcon : '')});
182
+ if($close.hasClass(className.left)) {
183
+ $toast.prepend($close);
184
+ } else {
185
+ $toast.append($close);
186
+ }
187
+ }
188
+ } else {
189
+ $toast = settings.cloneModule ? $module.clone().removeAttr('id') : $module;
190
+ $close = $toast.find('> i'+module.helpers.toClass(className.close));
191
+ settings.closeIcon = ($close.length > 0);
140
192
  }
141
-
142
- if (settings.title !== '') {
143
- var
144
- $title = $('<div/>')
145
- .addClass(className.title)
146
- .text(settings.title)
147
- ;
148
-
149
- $content.append($title);
193
+ if ($toast.hasClass(className.compact)) {
194
+ settings.compact = true;
150
195
  }
151
-
152
- $content.append($('<div/>').html(settings.message));
153
-
154
- $toast
155
- .addClass(settings.class + ' ' + className.toast)
156
- .append($content)
157
- ;
158
- $toast.css('opacity', settings.opacity);
159
- if(settings.compact || $toast.hasClass('compact')) {
160
- $toastBox.addClass('compact');
196
+ if ($toast.hasClass('card')) {
197
+ settings.compact = false;
161
198
  }
162
- if($toast.hasClass('toast') && !$toast.hasClass('inverted')){
163
- $progress.addClass('inverted');
164
- } else {
165
- $progress.removeClass('inverted');
166
- }
167
- $toast = $toastBox.append($toast);
168
- if(!!settings.showProgress && settings.displayTime > 0){
169
- $progress
170
- .addClass(settings.showProgress)
171
- .append($progressBar);
172
- if ($progress.hasClass('top')) {
173
- $toast.prepend($progress);
199
+ $actions = $toast.find('.actions');
200
+ if (module.has.configActions()) {
201
+ if ($actions.length === 0) {
202
+ $actions = $('<div/>', {class: className.actions + ' ' + (settings.classActions || '')}).appendTo($toast);
203
+ }
204
+ if($toast.hasClass('card') && !$actions.hasClass(className.attached)) {
205
+ $actions.addClass(className.extraContent);
206
+ if($actions.hasClass(className.vertical)) {
207
+ $actions.removeClass(className.vertical);
208
+ module.error(error.verticalCard);
209
+ }
210
+ }
211
+ settings.actions.forEach(function (el) {
212
+ var icon = el[fields.icon] ? '<i class="' + module.helpers.deQuote(el[fields.icon]) + ' icon"></i>' : '',
213
+ text = module.helpers.escape(el[fields.text] || '', settings.preserveHTML),
214
+ cls = module.helpers.deQuote(el[fields.class] || ''),
215
+ click = el[fields.click] && $.isFunction(el[fields.click]) ? el[fields.click] : function () {};
216
+ $actions.append($('<button/>', {
217
+ html: icon + text,
218
+ class: className.button + ' ' + cls,
219
+ click: function () {
220
+ if (click.call(element, $module) === false) {
221
+ return;
222
+ }
223
+ module.close();
224
+ }
225
+ }));
226
+ });
227
+ }
228
+ if ($actions && $actions.hasClass(className.vertical)) {
229
+ $toast.addClass(className.vertical);
230
+ }
231
+ if($actions.length > 0 && !$actions.hasClass(className.attached)) {
232
+ if ($actions && (!$actions.hasClass(className.basic) || $actions.hasClass(className.left))) {
233
+ $toast.addClass(className.actions);
234
+ }
235
+ }
236
+ if(settings.displayTime === 'auto'){
237
+ settings.displayTime = Math.max(settings.minDisplayTime, $toast.text().split(" ").length / settings.wordsPerMinute * 60000);
238
+ }
239
+ $toastBox.append($toast);
240
+
241
+ if($actions.length > 0 && $actions.hasClass(className.attached)) {
242
+ $actions.addClass(className.buttons);
243
+ $actions.detach();
244
+ $toast.addClass(className.attached);
245
+ if (!$actions.hasClass(className.vertical)) {
246
+ if ($actions.hasClass(className.top)) {
247
+ $toastBox.prepend($actions);
248
+ $toast.addClass(className.bottom);
249
+ } else {
250
+ $toastBox.append($actions);
251
+ $toast.addClass(className.top);
252
+ }
174
253
  } else {
175
- $toast.append($progress);
254
+ $toast.wrap(
255
+ $('<div/>',{
256
+ class:className.vertical + ' ' +
257
+ className.attached + ' ' +
258
+ (settings.compact ? className.compact : '')
259
+ })
260
+ );
261
+ if($actions.hasClass(className.left)) {
262
+ $toast.addClass(className.left).parent().addClass(className.left).prepend($actions);
263
+ } else {
264
+ $toast.parent().append($actions);
265
+ }
176
266
  }
177
- $progressBar.css('transition','width '+(settings.displayTime/1000)+'s linear');
178
- $progressBar.width(settings.progressUp?'0%':'100%');
179
- setTimeout(function() {
180
- if(typeof $progress !== 'undefined'){
181
- $progressBar.width(settings.progressUp?'100%':'0%');
267
+ }
268
+ if($module !== $toast) {
269
+ $module = $toast;
270
+ element = $toast[0];
271
+ }
272
+ if(settings.displayTime > 0) {
273
+ var progressingClass = className.progressing+' '+(settings.pauseOnHover ? className.pausable:'');
274
+ if (!!settings.showProgress) {
275
+ $progress = $('<div/>', {
276
+ class: className.progress + ' ' + (settings.classProgress || settings.class),
277
+ 'data-percent': ''
278
+ });
279
+ if(!settings.classProgress) {
280
+ if ($toast.hasClass('toast') && !$toast.hasClass(className.inverted)) {
281
+ $progress.addClass(className.inverted);
282
+ } else {
283
+ $progress.removeClass(className.inverted);
284
+ }
285
+ }
286
+ $progressBar = $('<div/>', {class: 'bar '+(settings.progressUp ? 'up ' : 'down ')+progressingClass});
287
+ $progress
288
+ .addClass(settings.showProgress)
289
+ .append($progressBar);
290
+ if ($progress.hasClass(className.top)) {
291
+ $toastBox.prepend($progress);
292
+ } else {
293
+ $toastBox.append($progress);
182
294
  }
183
- },300);
295
+ $progressBar.css('animation-duration', settings.displayTime / 1000 + 's');
296
+ }
297
+ $animationObject = $('<span/>',{class:'wait '+progressingClass});
298
+ $animationObject.css('animation-duration', settings.displayTime / 1000 + 's');
299
+ $animationObject.appendTo($toast);
300
+ }
301
+ if (settings.compact) {
302
+ $toastBox.addClass(className.compact);
303
+ $toast.addClass(className.compact);
304
+ if($progress) {
305
+ $progress.addClass(className.compact);
306
+ }
184
307
  }
185
308
  if (settings.newestOnTop) {
186
- $toast.prependTo(module.get.container());
309
+ $toastBox.prependTo(module.get.container());
187
310
  }
188
311
  else {
189
- $toast.appendTo(module.get.container());
312
+ $toastBox.appendTo(module.get.container());
190
313
  }
191
314
  }
192
315
  },
@@ -194,8 +317,17 @@ $.fn.toast = function(parameters) {
194
317
  bind: {
195
318
  events: function() {
196
319
  module.debug('Binding events to toast');
197
- (settings.closeIcon ? $close : $toast)
198
- .on('click' + eventNamespace, module.event.click)
320
+ if(settings.closeOnClick || settings.closeIcon) {
321
+ (settings.closeIcon ? $close : $toast)
322
+ .on('click' + eventNamespace, module.event.click)
323
+ ;
324
+ }
325
+ if($animationObject) {
326
+ $animationObject.on('animationend' + eventNamespace, module.close);
327
+ }
328
+ $toastBox
329
+ .on('click' + eventNamespace, selector.approve, module.event.approve)
330
+ .on('click' + eventNamespace, selector.deny, module.event.deny)
199
331
  ;
200
332
  }
201
333
  },
@@ -203,7 +335,15 @@ $.fn.toast = function(parameters) {
203
335
  unbind: {
204
336
  events: function() {
205
337
  module.debug('Unbinding events to toast');
206
- (settings.closeIcon ? $close : $toast)
338
+ if(settings.closeOnClick || settings.closeIcon) {
339
+ (settings.closeIcon ? $close : $toast)
340
+ .off('click' + eventNamespace)
341
+ ;
342
+ }
343
+ if($animationObject) {
344
+ $animationObject.off('animationend' + eventNamespace);
345
+ }
346
+ $toastBox
207
347
  .off('click' + eventNamespace)
208
348
  ;
209
349
  }
@@ -212,9 +352,9 @@ $.fn.toast = function(parameters) {
212
352
  animate: {
213
353
  show: function(callback) {
214
354
  callback = $.isFunction(callback) ? callback : function(){};
215
- if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
355
+ if(settings.transition && module.can.useElement('transition') && $module.transition('is supported')) {
216
356
  module.set.visible();
217
- $toast
357
+ $toastBox
218
358
  .transition({
219
359
  animation : settings.transition.showMethod + ' in',
220
360
  queue : false,
@@ -222,48 +362,50 @@ $.fn.toast = function(parameters) {
222
362
  verbose : settings.verbose,
223
363
  duration : settings.transition.showDuration,
224
364
  onComplete : function() {
225
- callback.call($toast, element);
226
- settings.onVisible.call($toast, element);
365
+ callback.call($toastBox, element);
366
+ settings.onVisible.call($toastBox, element);
227
367
  }
228
368
  })
229
369
  ;
230
370
  }
231
- else {
232
- module.error(error.noTransition);
233
- }
234
371
  },
235
372
  close: function(callback) {
236
373
  callback = $.isFunction(callback) ? callback : function(){};
237
374
  module.debug('Closing toast');
238
- if(settings.onHide.call($toast, element) === false) {
375
+ if(settings.onHide.call($toastBox, element) === false) {
239
376
  module.debug('onHide callback returned false, cancelling toast animation');
240
377
  return;
241
378
  }
242
379
  if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
243
- $toast
380
+ $toastBox
244
381
  .transition({
245
382
  animation : settings.transition.hideMethod + ' out',
246
383
  queue : false,
247
384
  duration : settings.transition.hideDuration,
248
385
  debug : settings.debug,
249
386
  verbose : settings.verbose,
387
+ interval : 50,
250
388
 
251
389
  onBeforeHide: function(callback){
252
390
  callback = $.isFunction(callback)?callback : function(){};
253
391
  if(settings.transition.closeEasing !== ''){
254
- $toast.css('opacity',0);
255
- $toast.wrap('<div/>').parent().slideUp(500,settings.transition.closeEasing,function(){
256
- $toast.parent().remove();
257
- callback.call($toast);
258
- });
392
+ if($toastBox) {
393
+ $toastBox.css('opacity', 0);
394
+ $toastBox.wrap('<div/>').parent().slideUp(500, settings.transition.closeEasing, function () {
395
+ if ($toastBox) {
396
+ $toastBox.parent().remove();
397
+ callback.call($toastBox);
398
+ }
399
+ });
400
+ }
259
401
  } else {
260
- callback.call($toast);
402
+ callback.call($toastBox);
261
403
  }
262
404
  },
263
405
  onComplete : function() {
406
+ callback.call($toastBox, element);
407
+ settings.onHidden.call($toastBox, element);
264
408
  module.destroy();
265
- callback.call($toast, element);
266
- settings.onHidden.call($toast, element);
267
409
  }
268
410
  })
269
411
  ;
@@ -271,6 +413,18 @@ $.fn.toast = function(parameters) {
271
413
  else {
272
414
  module.error(error.noTransition);
273
415
  }
416
+ },
417
+ pause: function() {
418
+ $animationObject.css('animationPlayState','paused');
419
+ if($progressBar) {
420
+ $progressBar.css('animationPlayState', 'paused');
421
+ }
422
+ },
423
+ continue: function() {
424
+ $animationObject.css('animationPlayState','running');
425
+ if($progressBar) {
426
+ $progressBar.css('animationPlayState', 'running');
427
+ }
274
428
  }
275
429
  },
276
430
 
@@ -278,12 +432,36 @@ $.fn.toast = function(parameters) {
278
432
  container: function() {
279
433
  module.verbose('Determining if there is already a container');
280
434
  return ($context.find(module.helpers.toClass(settings.position) + selector.container).length > 0);
435
+ },
436
+ toast: function(){
437
+ return !!module.get.toast();
438
+ },
439
+ toasts: function(){
440
+ return module.get.toasts().length > 0;
441
+ },
442
+ configActions: function () {
443
+ return Array.isArray(settings.actions) && settings.actions.length > 0;
281
444
  }
282
445
  },
283
446
 
284
447
  get: {
285
448
  container: function() {
286
449
  return ($context.find(module.helpers.toClass(settings.position) + selector.container)[0]);
450
+ },
451
+ toastBox: function() {
452
+ return $toastBox || null;
453
+ },
454
+ toast: function() {
455
+ return $toast || null;
456
+ },
457
+ toasts: function() {
458
+ return $(module.get.container()).find(selector.box);
459
+ },
460
+ iconClass: function() {
461
+ return typeof settings.showIcon === 'string' ? settings.showIcon : settings.showIcon && settings.icons[settings.class] ? settings.icons[settings.class] : '';
462
+ },
463
+ remainingTime: function() {
464
+ return $animationObject ? $animationObject.css('opacity') * settings.displayTime : 0;
287
465
  }
288
466
  },
289
467
 
@@ -300,8 +478,24 @@ $.fn.toast = function(parameters) {
300
478
  },
301
479
 
302
480
  event: {
303
- click: function() {
304
- settings.onClick.call($toast, element);
481
+ click: function(event) {
482
+ if($(event.target).closest('a').length === 0) {
483
+ settings.onClick.call($toastBox, element);
484
+ module.close();
485
+ }
486
+ },
487
+ approve: function() {
488
+ if(settings.onApprove.call(element, $module) === false) {
489
+ module.verbose('Approve callback returned false cancelling close');
490
+ return;
491
+ }
492
+ module.close();
493
+ },
494
+ deny: function() {
495
+ if(settings.onDeny.call(element, $module) === false) {
496
+ module.verbose('Deny callback returned false cancelling close');
497
+ return;
498
+ }
305
499
  module.close();
306
500
  }
307
501
  },
@@ -318,6 +512,43 @@ $.fn.toast = function(parameters) {
318
512
  });
319
513
 
320
514
  return result;
515
+ },
516
+ deQuote: function(string) {
517
+ return String(string).replace(/"/g,"");
518
+ },
519
+ escape: function(string, preserveHTML) {
520
+ if (preserveHTML){
521
+ return string;
522
+ }
523
+ var
524
+ badChars = /[<>"'`]/g,
525
+ shouldEscape = /[&<>"'`]/,
526
+ escape = {
527
+ "<": "&lt;",
528
+ ">": "&gt;",
529
+ '"': "&quot;",
530
+ "'": "&#x27;",
531
+ "`": "&#x60;"
532
+ },
533
+ escapedChar = function(chr) {
534
+ return escape[chr];
535
+ }
536
+ ;
537
+ if(shouldEscape.test(string)) {
538
+ string = string.replace(/&(?![a-z0-9#]{1,6};)/, "&amp;");
539
+ return string.replace(badChars, escapedChar);
540
+ }
541
+ return string;
542
+ }
543
+ },
544
+
545
+ can: {
546
+ useElement: function(element){
547
+ if ($.fn[element] !== undefined) {
548
+ return true;
549
+ }
550
+ module.error(error.noElement.replace('{element}',element));
551
+ return false;
321
552
  }
322
553
  },
323
554
 
@@ -495,6 +726,7 @@ $.fn.toast = function(parameters) {
495
726
  instance.invoke('destroy');
496
727
  }
497
728
  module.initialize();
729
+ returnedValue = $module;
498
730
  }
499
731
  })
500
732
  ;
@@ -518,18 +750,29 @@ $.fn.toast.settings = {
518
750
  context : 'body',
519
751
 
520
752
  position : 'top right',
521
- class : 'info',
753
+ class : 'neutral',
754
+ classProgress : false,
755
+ classActions : false,
756
+ classImage : 'mini',
522
757
 
523
758
  title : '',
524
759
  message : '',
525
760
  displayTime : 3000, // set to zero to require manually dismissal, otherwise hides on its own
526
- showIcon : true,
761
+ minDisplayTime : 1000, // minimum displaytime in case displayTime is set to 'auto'
762
+ wordsPerMinute : 120,
763
+ showIcon : false,
527
764
  newestOnTop : false,
528
765
  showProgress : false,
529
- progressUp : true, //if false, the bar will start at 100% and decrease to 0%
766
+ pauseOnHover : true,
767
+ progressUp : false, //if true, the bar will start at 0% and increase to 100%
530
768
  opacity : 1,
531
769
  compact : true,
532
770
  closeIcon : false,
771
+ closeOnClick : true,
772
+ cloneModule : true,
773
+ actions : false,
774
+ preserveHTML : true,
775
+ showImage : false,
533
776
 
534
777
  // transition settings
535
778
  transition : {
@@ -537,23 +780,41 @@ $.fn.toast.settings = {
537
780
  showDuration : 500,
538
781
  hideMethod : 'scale',
539
782
  hideDuration : 500,
540
- closeEasing : 'easeOutBounce' //Set to empty string to stack the closed toast area immediately (old behaviour)
783
+ closeEasing : 'easeOutCubic' //Set to empty string to stack the closed toast area immediately (old behaviour)
541
784
  },
542
785
 
543
786
  error: {
544
787
  method : 'The method you called is not defined.',
545
- noTransition : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'
788
+ noElement : 'This module requires ui {element}',
789
+ verticalCard : 'Vertical but not attached actions are not supported for card layout'
546
790
  },
547
791
 
548
792
  className : {
549
- container : 'toast-container',
550
- box : 'toast-box',
793
+ container : 'ui toast-container',
794
+ box : 'floating toast-box',
551
795
  progress : 'ui attached active progress',
552
796
  toast : 'ui toast',
553
- icon : 'icon',
797
+ icon : 'centered icon',
554
798
  visible : 'visible',
555
799
  content : 'content',
556
- title : 'header'
800
+ title : 'ui header',
801
+ actions : 'actions',
802
+ extraContent : 'extra content',
803
+ button : 'ui button',
804
+ buttons : 'ui buttons',
805
+ close : 'close icon',
806
+ image : 'ui image',
807
+ vertical : 'vertical',
808
+ attached : 'attached',
809
+ inverted : 'inverted',
810
+ compact : 'compact',
811
+ pausable : 'pausable',
812
+ progressing : 'progressing',
813
+ top : 'top',
814
+ bottom : 'bottom',
815
+ left : 'left',
816
+ basic : 'basic',
817
+ unclickable : 'unclickable'
557
818
  },
558
819
 
559
820
  icons : {
@@ -564,9 +825,19 @@ $.fn.toast.settings = {
564
825
  },
565
826
 
566
827
  selector : {
567
- container : '.toast-container',
828
+ container : '.ui.toast-container',
568
829
  box : '.toast-box',
569
- toast : '.ui.toast'
830
+ toast : '.ui.toast',
831
+ input : 'input:not([type="hidden"]), textarea, select, button, .ui.button, ui.dropdown',
832
+ approve : '.actions .positive, .actions .approve, .actions .ok',
833
+ deny : '.actions .negative, .actions .deny, .actions .cancel'
834
+ },
835
+
836
+ fields : {
837
+ class : 'class',
838
+ text : 'text',
839
+ icon : 'icon',
840
+ click : 'click'
570
841
  },
571
842
 
572
843
  // callbacks
@@ -576,6 +847,8 @@ $.fn.toast.settings = {
576
847
  onHide : function(){},
577
848
  onHidden : function(){},
578
849
  onRemove : function(){},
850
+ onApprove : function(){},
851
+ onDeny : function(){}
579
852
  };
580
853
 
581
854
  $.extend( $.easing, {
@@ -589,6 +862,9 @@ $.extend( $.easing, {
589
862
  } else {
590
863
  return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
591
864
  }
865
+ },
866
+ easeOutCubic: function (t) {
867
+ return (--t)*t*t+1;
592
868
  }
593
869
  });
594
870