fomantic-ui-sass 2.7.2 → 2.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -7
  3. data/app/assets/javascripts/semantic-ui/accordion.js +0 -6
  4. data/app/assets/javascripts/semantic-ui/api.js +1 -1
  5. data/app/assets/javascripts/semantic-ui/calendar.js +40 -12
  6. data/app/assets/javascripts/semantic-ui/checkbox.js +9 -0
  7. data/app/assets/javascripts/semantic-ui/dimmer.js +2 -4
  8. data/app/assets/javascripts/semantic-ui/dropdown.js +9 -11
  9. data/app/assets/javascripts/semantic-ui/embed.js +0 -1
  10. data/app/assets/javascripts/semantic-ui/form.js +10 -16
  11. data/app/assets/javascripts/semantic-ui/modal.js +28 -17
  12. data/app/assets/javascripts/semantic-ui/nag.js +1 -20
  13. data/app/assets/javascripts/semantic-ui/popup.js +0 -4
  14. data/app/assets/javascripts/semantic-ui/progress.js +161 -102
  15. data/app/assets/javascripts/semantic-ui/rating.js +0 -1
  16. data/app/assets/javascripts/semantic-ui/search.js +2 -7
  17. data/app/assets/javascripts/semantic-ui/shape.js +68 -145
  18. data/app/assets/javascripts/semantic-ui/sidebar.js +14 -12
  19. data/app/assets/javascripts/semantic-ui/site.js +0 -1
  20. data/app/assets/javascripts/semantic-ui/state.js +0 -1
  21. data/app/assets/javascripts/semantic-ui/sticky.js +1 -7
  22. data/app/assets/javascripts/semantic-ui/tab.js +17 -4
  23. data/app/assets/javascripts/semantic-ui/transition.js +7 -23
  24. data/app/assets/javascripts/semantic-ui/visibility.js +1 -3
  25. data/app/assets/stylesheets/semantic-ui/collections/_form.scss +4 -3
  26. data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +16 -16
  27. data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +8 -4
  28. data/app/assets/stylesheets/semantic-ui/collections/_table.scss +12 -3
  29. data/app/assets/stylesheets/semantic-ui/elements/_button.scss +3 -11
  30. data/app/assets/stylesheets/semantic-ui/elements/_container.scss +3 -3
  31. data/app/assets/stylesheets/semantic-ui/elements/_divider.scss +1 -1
  32. data/app/assets/stylesheets/semantic-ui/elements/_input.scss +3 -0
  33. data/app/assets/stylesheets/semantic-ui/elements/_label.scss +7 -5
  34. data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +5 -5
  35. data/app/assets/stylesheets/semantic-ui/elements/_step.scss +21 -4
  36. data/app/assets/stylesheets/semantic-ui/globals/_site.scss +0 -1
  37. data/app/assets/stylesheets/semantic-ui/modules/_calendar.scss +4 -0
  38. data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +6 -0
  39. data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +1 -1
  40. data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +72 -3
  41. data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +60 -41
  42. data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +1 -1
  43. data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +73 -35
  44. data/app/assets/stylesheets/semantic-ui/modules/_search.scss +1 -1
  45. data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +5 -0
  46. data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +4 -1
  47. data/app/assets/stylesheets/semantic-ui/modules/_slider.scss +4 -4
  48. data/app/assets/stylesheets/semantic-ui/views/_ad.scss +1 -1
  49. data/app/assets/stylesheets/semantic-ui/views/_card.scss +189 -3
  50. data/app/assets/stylesheets/semantic-ui/views/_item.scss +3 -3
  51. data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +1 -1
  52. data/lib/fomantic/ui/sass/version.rb +2 -2
  53. metadata +3 -3
@@ -80,6 +80,7 @@ $.fn.modal = function(parameters) {
80
80
 
81
81
  initialMouseDownInModal,
82
82
  initialMouseDownInScrollbar,
83
+ initialBodyMargin = '',
83
84
 
84
85
  elementEventNamespace,
85
86
  id,
@@ -97,7 +98,9 @@ $.fn.modal = function(parameters) {
97
98
  if ( settings.allowMultiple ) {
98
99
  module.create.innerDimmer();
99
100
  }
100
-
101
+ if (!settings.centered){
102
+ $module.addClass('top aligned');
103
+ }
101
104
  module.refreshModals();
102
105
 
103
106
  module.bind.events();
@@ -120,9 +123,6 @@ $.fn.modal = function(parameters) {
120
123
  var
121
124
  defaultSettings = {
122
125
  debug : settings.debug,
123
- variation : settings.centered
124
- ? false
125
- : 'top aligned',
126
126
  dimmerName : 'modals'
127
127
  },
128
128
  dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)
@@ -305,7 +305,7 @@ $.fn.modal = function(parameters) {
305
305
  isInModal = ($target.closest(selector.modal).length > 0),
306
306
  isInDOM = $.contains(document.documentElement, event.target)
307
307
  ;
308
- if(!isInModal && isInDOM && module.is.active() && $module.hasClass(className.top) ) {
308
+ if(!isInModal && isInDOM && module.is.active() && $module.hasClass(className.front) ) {
309
309
  module.debug('Dimmer clicked, hiding all modals');
310
310
  if(settings.allowMultiple) {
311
311
  if(!module.hideAll()) {
@@ -330,7 +330,7 @@ $.fn.modal = function(parameters) {
330
330
  if(keyCode == escapeKey) {
331
331
  if(settings.closable) {
332
332
  module.debug('Escape key pressed hiding modal');
333
- if ( $module.hasClass(className.top) ) {
333
+ if ( $module.hasClass(className.front) ) {
334
334
  module.hide();
335
335
  }
336
336
  }
@@ -401,6 +401,7 @@ $.fn.modal = function(parameters) {
401
401
  module.hideOthers(module.showModal);
402
402
  }
403
403
  else {
404
+ ignoreRepeatedEvents = false;
404
405
  if( settings.allowMultiple ) {
405
406
  if ( module.others.active() ) {
406
407
  $otherModals.filter('.' + className.active).find(selector.dimmer).addClass('active');
@@ -481,8 +482,8 @@ $.fn.modal = function(parameters) {
481
482
  onComplete : function() {
482
483
  module.unbind.scrollLock();
483
484
  if ( settings.allowMultiple ) {
484
- $previousModal.addClass(className.top);
485
- $module.removeClass(className.top);
485
+ $previousModal.addClass(className.front);
486
+ $module.removeClass(className.front);
486
487
 
487
488
  if ( hideOthersToo ) {
488
489
  $allModals.find(selector.dimmer).removeClass('active');
@@ -507,6 +508,7 @@ $.fn.modal = function(parameters) {
507
508
 
508
509
  showDimmer: function() {
509
510
  if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {
511
+ module.save.bodyMargin();
510
512
  module.debug('Showing dimmer');
511
513
  $dimmable.dimmer('show');
512
514
  }
@@ -519,6 +521,7 @@ $.fn.modal = function(parameters) {
519
521
  if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {
520
522
  module.unbind.scrollLock();
521
523
  $dimmable.dimmer('hide', function() {
524
+ module.restore.bodyMargin();
522
525
  module.remove.clickaway();
523
526
  module.remove.screenHeight();
524
527
  });
@@ -597,6 +600,12 @@ $.fn.modal = function(parameters) {
597
600
  if(!inCurrentModal) {
598
601
  $focusedElement = $(document.activeElement).blur();
599
602
  }
603
+ },
604
+ bodyMargin: function() {
605
+ initialBodyMargin = $body.css('margin-right');
606
+ var bodyMarginRightPixel = parseInt(initialBodyMargin.replace(/[^\d.]/g, '')),
607
+ bodyScrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
608
+ $body.css('margin-right', (bodyMarginRightPixel + bodyScrollbarWidth) + 'px');
600
609
  }
601
610
  },
602
611
 
@@ -605,6 +614,9 @@ $.fn.modal = function(parameters) {
605
614
  if($focusedElement && $focusedElement.length > 0 && settings.restoreFocus) {
606
615
  $focusedElement.focus();
607
616
  }
617
+ },
618
+ bodyMargin: function() {
619
+ $body.css('margin-right', initialBodyMargin);
608
620
  }
609
621
  },
610
622
 
@@ -756,9 +768,6 @@ $.fn.modal = function(parameters) {
756
768
  dimmerName : 'modals',
757
769
  closable : 'auto',
758
770
  useFlex : module.can.useFlex(),
759
- variation : settings.centered
760
- ? false
761
- : 'top aligned',
762
771
  duration : {
763
772
  show : settings.duration,
764
773
  hide : settings.duration
@@ -795,7 +804,7 @@ $.fn.modal = function(parameters) {
795
804
  ;
796
805
  $module
797
806
  .css({
798
- marginTop: (settings.centered && module.can.fit())
807
+ marginTop: (!$module.hasClass('aligned') && module.can.fit())
799
808
  ? -(height / 2)
800
809
  : 0,
801
810
  marginLeft: -(width / 2)
@@ -807,7 +816,7 @@ $.fn.modal = function(parameters) {
807
816
  if( module.can.fit() ) {
808
817
  $body.css('height', '');
809
818
  }
810
- else {
819
+ else if(!$module.hasClass('bottom')) {
811
820
  module.debug('Modal is taller than page content, resizing page height');
812
821
  $body
813
822
  .css('height', module.cache.height + (settings.padding * 2) )
@@ -815,8 +824,8 @@ $.fn.modal = function(parameters) {
815
824
  }
816
825
  },
817
826
  active: function() {
818
- $module.addClass(className.active + ' ' + className.top);
819
- $otherModals.filter('.' + className.active).removeClass(className.top);
827
+ $module.addClass(className.active + ' ' + className.front);
828
+ $otherModals.filter('.' + className.active).removeClass(className.front);
820
829
  },
821
830
  scrolling: function() {
822
831
  $dimmable.addClass(className.scrolling);
@@ -834,9 +843,11 @@ $.fn.modal = function(parameters) {
834
843
  module.bind.scrollLock();
835
844
  }
836
845
  }
837
- else {
846
+ else if (!$module.hasClass('bottom')){
838
847
  module.verbose('Modal cannot fit on screen setting to scrolling');
839
848
  module.set.scrolling();
849
+ } else {
850
+ module.verbose('Bottom aligned modal not fitting on screen is unsupported for scrolling');
840
851
  }
841
852
  },
842
853
  undetached: function() {
@@ -1110,7 +1121,7 @@ $.fn.modal.settings = {
1110
1121
  loading : 'loading',
1111
1122
  scrolling : 'scrolling',
1112
1123
  undetached : 'undetached',
1113
- top : 'top'
1124
+ front : 'front'
1114
1125
  }
1115
1126
  };
1116
1127
 
@@ -43,7 +43,6 @@ $.fn.nag = function(parameters) {
43
43
  ? $.extend(true, {}, $.fn.nag.settings, parameters)
44
44
  : $.extend({}, $.fn.nag.settings),
45
45
 
46
- className = settings.className,
47
46
  selector = settings.selector,
48
47
  error = settings.error,
49
48
  namespace = settings.namespace,
@@ -53,7 +52,6 @@ $.fn.nag = function(parameters) {
53
52
 
54
53
  $module = $(this),
55
54
 
56
- $close = $module.find(selector.close),
57
55
  $context = (settings.context)
58
56
  ? $(settings.context)
59
57
  : $('body'),
@@ -61,24 +59,7 @@ $.fn.nag = function(parameters) {
61
59
  element = this,
62
60
  instance = $module.data(moduleNamespace),
63
61
 
64
- moduleOffset,
65
- moduleHeight,
66
-
67
- contextWidth,
68
- contextHeight,
69
- contextOffset,
70
-
71
- yOffset,
72
- yPosition,
73
-
74
- timer,
75
- module,
76
-
77
- requestAnimationFrame = window.requestAnimationFrame
78
- || window.mozRequestAnimationFrame
79
- || window.webkitRequestAnimationFrame
80
- || window.msRequestAnimationFrame
81
- || function(callback) { setTimeout(callback, 0); }
62
+ module
82
63
  ;
83
64
  module = {
84
65
 
@@ -450,10 +450,6 @@ $.fn.popup = function(parameters) {
450
450
  hide: function(callback) {
451
451
  callback = $.isFunction(callback) ? callback : function(){};
452
452
  module.debug('Hiding pop-up');
453
- if(settings.onHide.call($popup, element) === false) {
454
- module.debug('onHide callback returned false, cancelling popup animation');
455
- return;
456
- }
457
453
  if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
458
454
  $popup
459
455
  .transition({
@@ -56,8 +56,8 @@ $.fn.progress = function(parameters) {
56
56
  moduleNamespace = 'module-' + namespace,
57
57
 
58
58
  $module = $(this),
59
- $bar = $(this).find(selector.bar),
60
- $progress = $(this).find(selector.progress),
59
+ $bars = $(this).find(selector.bar),
60
+ $progresses = $(this).find(selector.progress),
61
61
  $label = $(this).find(selector.label),
62
62
 
63
63
  element = this,
@@ -67,14 +67,29 @@ $.fn.progress = function(parameters) {
67
67
  transitionEnd,
68
68
  module
69
69
  ;
70
-
71
70
  module = {
71
+ helper: {
72
+ sum: function (nums) {
73
+ return nums.reduce(function (left, right) {
74
+ return left + right;
75
+ }, 0);
76
+ },
77
+ forceArray: function (element) {
78
+ return Array.isArray(element)
79
+ ? element
80
+ : !isNaN(element)
81
+ ? [element]
82
+ : typeof element == 'string'
83
+ ? element.split(',')
84
+ : []
85
+ ;
86
+ }
87
+ },
72
88
 
73
89
  initialize: function() {
74
- module.debug('Initializing progress bar', settings);
75
-
76
90
  module.set.duration();
77
91
  module.set.transitionEvent();
92
+ module.debug(element);
78
93
 
79
94
  module.read.metadata();
80
95
  module.read.settings();
@@ -113,21 +128,21 @@ $.fn.progress = function(parameters) {
113
128
  metadata: function() {
114
129
  var
115
130
  data = {
116
- percent : $module.data(metadata.percent),
131
+ percent : module.helper.forceArray($module.data(metadata.percent)),
117
132
  total : $module.data(metadata.total),
118
- value : $module.data(metadata.value)
133
+ value : module.helper.forceArray($module.data(metadata.value))
119
134
  }
120
135
  ;
121
136
  if(data.total) {
122
137
  module.debug('Total value set from metadata', data.total);
123
138
  module.set.total(data.total);
124
139
  }
125
- if(!isNaN(data.value)) {
140
+ if(data.value.length > 0) {
126
141
  module.debug('Current value set from metadata', data.value);
127
142
  module.set.value(data.value);
128
143
  module.set.progress(data.value);
129
144
  }
130
- if(!isNaN(data.percent)) {
145
+ if(data.percent.length > 0) {
131
146
  module.debug('Current percent value set from metadata', data.percent);
132
147
  module.set.percent(data.percent);
133
148
  }
@@ -154,14 +169,14 @@ $.fn.progress = function(parameters) {
154
169
  var
155
170
  transitionEnd = module.get.transitionEnd()
156
171
  ;
157
- $bar
172
+ $bars
158
173
  .one(transitionEnd + eventNamespace, function(event) {
159
174
  clearTimeout(module.failSafeTimer);
160
175
  callback.call(this, event);
161
176
  })
162
177
  ;
163
178
  module.failSafeTimer = setTimeout(function() {
164
- $bar.triggerHandler(transitionEnd);
179
+ $bars.triggerHandler(transitionEnd);
165
180
  }, settings.duration + settings.failSafeDelay);
166
181
  module.verbose('Adding fail safe timer', module.timer);
167
182
  }
@@ -169,23 +184,19 @@ $.fn.progress = function(parameters) {
169
184
 
170
185
  increment: function(incrementValue) {
171
186
  var
172
- maxValue,
173
187
  startValue,
174
188
  newValue
175
189
  ;
176
190
  if( module.has.total() ) {
177
191
  startValue = module.get.value();
178
192
  incrementValue = incrementValue || 1;
179
- newValue = startValue + incrementValue;
180
193
  }
181
194
  else {
182
195
  startValue = module.get.percent();
183
196
  incrementValue = incrementValue || module.get.randomValue();
184
-
185
- newValue = startValue + incrementValue;
186
- maxValue = 100;
187
- module.debug('Incrementing percentage by', startValue, newValue);
188
197
  }
198
+ newValue = startValue + incrementValue;
199
+ module.debug('Incrementing percentage by', startValue, newValue, incrementValue);
189
200
  newValue = module.get.normalizedValue(newValue);
190
201
  module.set.progress(newValue);
191
202
  },
@@ -221,13 +232,14 @@ $.fn.progress = function(parameters) {
221
232
  },
222
233
 
223
234
  get: {
224
- text: function(templateText) {
235
+ text: function(templateText, index) {
225
236
  var
226
- value = module.value || 0,
237
+ index_ = index || 0,
238
+ value = module.value[index_] || 0,
227
239
  total = module.total || 0,
228
240
  percent = (animating)
229
- ? module.get.displayPercent()
230
- : module.percent || 0,
241
+ ? module.get.displayPercent(index_)
242
+ : module.percent[index_] || 0,
231
243
  left = (module.total > 0)
232
244
  ? (total - value)
233
245
  : (100 - percent)
@@ -238,6 +250,7 @@ $.fn.progress = function(parameters) {
238
250
  .replace('{total}', total)
239
251
  .replace('{left}', left)
240
252
  .replace('{percent}', percent)
253
+ .replace('{bar}', settings.text.bars[index_] || '')
241
254
  ;
242
255
  module.verbose('Adding variables to progress bar text', templateText);
243
256
  return templateText;
@@ -302,25 +315,28 @@ $.fn.progress = function(parameters) {
302
315
 
303
316
  // gets current displayed percentage (if animating values this is the intermediary value)
304
317
  displayPercent: function() {
305
- var
306
- barWidth = $bar.width(),
307
- totalWidth = $module.width(),
308
- minDisplay = parseInt($bar.css('min-width'), 10),
309
- displayPercent = (barWidth > minDisplay)
310
- ? (barWidth / totalWidth * 100)
311
- : module.percent
312
- ;
313
- return (settings.precision > 0)
314
- ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)
315
- : Math.round(displayPercent)
316
- ;
318
+ return $bars.map(function(index, element) {
319
+ var
320
+ $bar = $(element),
321
+ barWidth = $bar.width(),
322
+ totalWidth = $module.width(),
323
+ minDisplay = parseInt($bar.css('min-width'), 10),
324
+ displayPercent = (barWidth > minDisplay)
325
+ ? (barWidth / totalWidth * 100)
326
+ : module.percent
327
+ ;
328
+ return (settings.precision > 0)
329
+ ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)
330
+ : Math.round(displayPercent)
331
+ ;
332
+ }).toArray();
317
333
  },
318
334
 
319
- percent: function() {
320
- return module.percent || 0;
335
+ percent: function(index) {
336
+ return module.percent[index || 0] || 0;
321
337
  },
322
- value: function() {
323
- return module.nextValue || module.value || 0;
338
+ value: function(index) {
339
+ return module.nextValue || module.value[index || 0] || 0;
324
340
  },
325
341
  total: function() {
326
342
  return module.total || false;
@@ -394,19 +410,46 @@ $.fn.progress = function(parameters) {
394
410
  },
395
411
 
396
412
  set: {
397
- barWidth: function(value) {
398
- if(value > 100) {
399
- module.error(error.tooHigh, value);
413
+ barWidth: function(values) {
414
+ module.debug("set bar width with ", values);
415
+ values = module.helper.forceArray(values);
416
+ var total = module.helper.sum(values);
417
+ if(total > 100) {
418
+ module.error(error.tooHigh, total);
400
419
  }
401
- else if (value < 0) {
402
- module.error(error.tooLow, value);
420
+ else if (total < 0) {
421
+ module.error(error.tooLow, total);
403
422
  }
404
423
  else {
405
- $bar
406
- .css('width', value + '%')
407
- ;
424
+ var firstNonZeroIndex = -1;
425
+ var lastNonZeroIndex = -1;
426
+ var percents = values.map(function(value, index) {
427
+ var $bar = $($bars[index]);
428
+ if (value === 0) {
429
+ $bar.css('display', 'none');
430
+ } else {
431
+ if (firstNonZeroIndex == -1) {
432
+ firstNonZeroIndex = index;
433
+ }
434
+ lastNonZeroIndex = index;
435
+ $bar.css({
436
+ display: 'block',
437
+ width: value + '%'
438
+ });
439
+ }
440
+ return parseInt(value, 10);
441
+ });
442
+ values.forEach(function(_, index) {
443
+ var $bar = $($bars[index]);
444
+ $bar.css({
445
+ borderTopLeftRadius: index == firstNonZeroIndex ? '' : 0,
446
+ borderBottomLeftRadius: index == firstNonZeroIndex ? '' : 0,
447
+ borderTopRightRadius: index == lastNonZeroIndex ? '' : 0,
448
+ borderBottomRightRadius: index == lastNonZeroIndex ? '' : 0
449
+ });
450
+ });
408
451
  $module
409
- .attr('data-percent', parseInt(value, 10))
452
+ .attr('data-percent', percents)
410
453
  ;
411
454
  }
412
455
  },
@@ -417,41 +460,48 @@ $.fn.progress = function(parameters) {
417
460
  : duration
418
461
  ;
419
462
  module.verbose('Setting progress bar transition duration', duration);
420
- $bar
463
+ $bars
421
464
  .css({
422
465
  'transition-duration': duration
423
466
  })
424
467
  ;
425
468
  },
426
- percent: function(percent) {
427
- percent = (typeof percent == 'string')
428
- ? +(percent.replace('%', ''))
429
- : percent
430
- ;
469
+ percent: function(percents) {
470
+ percents = module.helper.forceArray(percents).map(function(percent) {
471
+ return (typeof percent == 'string')
472
+ ? +(percent.replace('%', ''))
473
+ : percent
474
+ ;
475
+ });
431
476
  // round display percentage
432
- percent = (settings.precision > 0)
433
- ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)
434
- : Math.round(percent)
435
- ;
436
- module.percent = percent;
437
- if( !module.has.total() ) {
438
- module.value = (settings.precision > 0)
439
- ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)
440
- : Math.round( (percent / 100) * module.total * 10) / 10
477
+ percents = percents.map(function(percent){
478
+ return (settings.precision > 0)
479
+ ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)
480
+ : Math.round(percent)
441
481
  ;
442
- if(settings.limitValues) {
443
- module.value = (module.value > 100)
444
- ? 100
445
- : (module.value < 0)
446
- ? 0
447
- : module.value
482
+ });
483
+ module.percent = percents;
484
+ if( !module.has.total() ) {
485
+ module.value = percents.map(function(percent){
486
+ return (settings.precision > 0)
487
+ ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)
488
+ : Math.round( (percent / 100) * module.total * 10) / 10
448
489
  ;
490
+ });
491
+ if(settings.limitValues) {
492
+ module.value = module.value.map(function(value) {
493
+ return (value > 100)
494
+ ? 100
495
+ : (module.value < 0)
496
+ ? 0
497
+ : module.value;
498
+ });
449
499
  }
450
500
  }
451
- module.set.barWidth(percent);
501
+ module.set.barWidth(percents);
452
502
  module.set.labelInterval();
453
503
  module.set.labels();
454
- settings.onChange.call(element, percent, module.value, module.total);
504
+ settings.onChange.call(element, percents, module.value, module.total);
455
505
  },
456
506
  labelInterval: function() {
457
507
  var
@@ -492,7 +542,7 @@ $.fn.progress = function(parameters) {
492
542
  state: function(percent) {
493
543
  percent = (percent !== undefined)
494
544
  ? percent
495
- : module.percent
545
+ : module.helper.sum(module.percent)
496
546
  ;
497
547
  if(percent === 100) {
498
548
  if(settings.autoSuccess && !(module.is.warning() || module.is.error() || module.is.success())) {
@@ -515,17 +565,20 @@ $.fn.progress = function(parameters) {
515
565
  }
516
566
  },
517
567
  barLabel: function(text) {
518
- if(text !== undefined) {
519
- $progress.text( module.get.text(text) );
520
- }
521
- else if(settings.label == 'ratio' && module.total) {
522
- module.verbose('Adding ratio to bar label');
523
- $progress.text( module.get.text(settings.text.ratio) );
524
- }
525
- else if(settings.label == 'percent') {
526
- module.verbose('Adding percentage to bar label');
527
- $progress.text( module.get.text(settings.text.percent) );
528
- }
568
+ $progresses.map(function(index, element){
569
+ var $progress = $(element);
570
+ if (text !== undefined) {
571
+ $progress.text( module.get.text(text, index) );
572
+ }
573
+ else if (settings.label == 'ratio' && module.total) {
574
+ module.verbose('Adding ratio to bar label');
575
+ $progress.text( module.get.text(settings.text.ratio, index) );
576
+ }
577
+ else if (settings.label == 'percent') {
578
+ module.verbose('Adding percentage to bar label');
579
+ $progress.text( module.get.text(settings.text.percent, index) );
580
+ }
581
+ });
529
582
  },
530
583
  active: function(text) {
531
584
  text = text || settings.text.active;
@@ -603,7 +656,7 @@ $.fn.progress = function(parameters) {
603
656
  module.total = totalValue;
604
657
  },
605
658
  value: function(value) {
606
- module.value = value;
659
+ module.value = module.helper.forceArray(value);
607
660
  },
608
661
  progress: function(value) {
609
662
  if(!module.has.progressPoll()) {
@@ -632,26 +685,31 @@ $.fn.progress = function(parameters) {
632
685
  module.remove.nextValue();
633
686
  }
634
687
  },
635
- progress: function(value) {
636
- var
637
- percentComplete
638
- ;
639
- value = module.get.numericValue(value);
640
- if(value === false) {
641
- module.error(error.nonNumeric, value);
642
- }
643
- value = module.get.normalizedValue(value);
644
- if( module.has.total() ) {
645
- module.set.value(value);
646
- percentComplete = (value / module.total) * 100;
647
- module.debug('Calculating percent complete from total', percentComplete);
648
- module.set.percent( percentComplete );
649
- }
650
- else {
651
- percentComplete = value;
652
- module.debug('Setting value to exact percentage value', percentComplete);
653
- module.set.percent( percentComplete );
688
+ progress: function(values) {
689
+ var hasTotal = module.has.total();
690
+ if (hasTotal) {
691
+ module.set.value(values);
654
692
  }
693
+ var percentCompletes = module.helper.forceArray(values).map(function(value) {
694
+ var
695
+ percentComplete
696
+ ;
697
+ value = module.get.numericValue(value);
698
+ if (value === false) {
699
+ module.error(error.nonNumeric, value);
700
+ }
701
+ value = module.get.normalizedValue(value);
702
+ if (hasTotal) {
703
+ percentComplete = (value / module.total) * 100;
704
+ module.debug('Calculating percent complete from total', percentComplete);
705
+ }
706
+ else {
707
+ percentComplete = value;
708
+ module.debug('Setting value to exact percentage value', percentComplete);
709
+ }
710
+ return percentComplete;
711
+ });
712
+ module.set.percent( percentCompletes );
655
713
  }
656
714
  },
657
715
 
@@ -911,7 +969,8 @@ $.fn.progress.settings = {
911
969
  success : false,
912
970
  warning : false,
913
971
  percent : '{percent}%',
914
- ratio : '{value} of {total}'
972
+ ratio : '{value} of {total}',
973
+ bars : ['']
915
974
  },
916
975
 
917
976
  className : {