fomantic-ui-sass 2.8.2 → 2.8.7
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/app/assets/fonts/semantic-ui/brand-icons.eot +0 -0
- data/app/assets/fonts/semantic-ui/brand-icons.svg +928 -689
- data/app/assets/fonts/semantic-ui/brand-icons.ttf +0 -0
- data/app/assets/fonts/semantic-ui/brand-icons.woff +0 -0
- data/app/assets/fonts/semantic-ui/brand-icons.woff2 +0 -0
- data/app/assets/fonts/semantic-ui/icons.eot +0 -0
- data/app/assets/fonts/semantic-ui/icons.svg +610 -426
- data/app/assets/fonts/semantic-ui/icons.ttf +0 -0
- data/app/assets/fonts/semantic-ui/icons.woff +0 -0
- data/app/assets/fonts/semantic-ui/icons.woff2 +0 -0
- data/app/assets/fonts/semantic-ui/outline-icons.eot +0 -0
- data/app/assets/fonts/semantic-ui/outline-icons.svg +22 -18
- data/app/assets/fonts/semantic-ui/outline-icons.ttf +0 -0
- data/app/assets/fonts/semantic-ui/outline-icons.woff +0 -0
- data/app/assets/fonts/semantic-ui/outline-icons.woff2 +0 -0
- data/app/assets/javascripts/semantic-ui/calendar.js +249 -60
- data/app/assets/javascripts/semantic-ui/checkbox.js +2 -2
- data/app/assets/javascripts/semantic-ui/dimmer.js +3 -3
- data/app/assets/javascripts/semantic-ui/dropdown.js +98 -62
- data/app/assets/javascripts/semantic-ui/form.js +97 -35
- data/app/assets/javascripts/semantic-ui/modal.js +9 -1
- data/app/assets/javascripts/semantic-ui/popup.js +8 -7
- data/app/assets/javascripts/semantic-ui/progress.js +20 -24
- data/app/assets/javascripts/semantic-ui/search.js +30 -2
- data/app/assets/javascripts/semantic-ui/slider.js +8 -8
- data/app/assets/javascripts/semantic-ui/tab.js +3 -2
- data/app/assets/javascripts/semantic-ui/toast.js +11 -9
- data/app/assets/javascripts/semantic-ui/visibility.js +1 -1
- data/app/assets/stylesheets/semantic-ui/collections/_form.scss +86 -93
- data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +8 -6
- data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +36 -35
- data/app/assets/stylesheets/semantic-ui/collections/_message.scss +4 -4
- data/app/assets/stylesheets/semantic-ui/collections/_table.scss +39 -23
- data/app/assets/stylesheets/semantic-ui/elements/_button.scss +9 -3
- data/app/assets/stylesheets/semantic-ui/elements/_emoji.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_header.scss +8 -8
- data/app/assets/stylesheets/semantic-ui/elements/_icon.scss +159 -18
- data/app/assets/stylesheets/semantic-ui/elements/_image.scss +33 -4
- data/app/assets/stylesheets/semantic-ui/elements/_input.scss +68 -68
- data/app/assets/stylesheets/semantic-ui/elements/_label.scss +38 -2
- data/app/assets/stylesheets/semantic-ui/elements/_list.scss +12 -12
- data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +7 -1
- data/app/assets/stylesheets/semantic-ui/elements/_step.scss +16 -9
- data/app/assets/stylesheets/semantic-ui/elements/_text.scss +15 -0
- data/app/assets/stylesheets/semantic-ui/modules/_calendar.scss +16 -9
- data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +1 -0
- data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +26 -23
- data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +123 -32
- data/app/assets/stylesheets/semantic-ui/modules/_embed.scss +6 -6
- data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +13 -6
- data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +36 -7
- data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +32 -3
- data/app/assets/stylesheets/semantic-ui/modules/_search.scss +90 -0
- data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +1 -0
- data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +2 -1
- data/app/assets/stylesheets/semantic-ui/modules/_slider.scss +9 -0
- data/app/assets/stylesheets/semantic-ui/modules/_toast.scss +7 -7
- data/app/assets/stylesheets/semantic-ui/modules/_transition.scss +34 -34
- data/app/assets/stylesheets/semantic-ui/views/_card.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/views/_feed.scss +5 -5
- data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +4 -4
- data/lib/fomantic/ui/sass/version.rb +2 -2
- metadata +6 -6
@@ -95,6 +95,9 @@ $.fn.form = function(parameters) {
|
|
95
95
|
module.verbose('Initializing form validation', $module, settings);
|
96
96
|
module.bindEvents();
|
97
97
|
module.set.defaults();
|
98
|
+
if (settings.autoCheckRequired) {
|
99
|
+
module.set.autoCheck();
|
100
|
+
}
|
98
101
|
module.instantiate();
|
99
102
|
}
|
100
103
|
},
|
@@ -216,6 +219,7 @@ $.fn.form = function(parameters) {
|
|
216
219
|
$field.val('');
|
217
220
|
}
|
218
221
|
});
|
222
|
+
module.remove.states();
|
219
223
|
},
|
220
224
|
|
221
225
|
reset: function() {
|
@@ -256,8 +260,7 @@ $.fn.form = function(parameters) {
|
|
256
260
|
$field.val(defaultValue);
|
257
261
|
}
|
258
262
|
});
|
259
|
-
|
260
|
-
module.determine.isDirty();
|
263
|
+
module.remove.states();
|
261
264
|
},
|
262
265
|
|
263
266
|
determine: {
|
@@ -333,20 +336,20 @@ $.fn.form = function(parameters) {
|
|
333
336
|
}
|
334
337
|
},
|
335
338
|
blank: function($field) {
|
336
|
-
return
|
339
|
+
return String($field.val()).trim() === '';
|
337
340
|
},
|
338
|
-
valid: function(field) {
|
341
|
+
valid: function(field, showErrors) {
|
339
342
|
var
|
340
343
|
allValid = true
|
341
344
|
;
|
342
345
|
if(field) {
|
343
346
|
module.verbose('Checking if field is valid', field);
|
344
|
-
return module.validate.field(validation[field], field,
|
347
|
+
return module.validate.field(validation[field], field, !!showErrors);
|
345
348
|
}
|
346
349
|
else {
|
347
350
|
module.verbose('Checking if form is valid');
|
348
351
|
$.each(validation, function(fieldName, field) {
|
349
|
-
if( !module.is.valid(fieldName) ) {
|
352
|
+
if( !module.is.valid(fieldName, showErrors) ) {
|
350
353
|
allValid = false;
|
351
354
|
}
|
352
355
|
});
|
@@ -363,9 +366,15 @@ $.fn.form = function(parameters) {
|
|
363
366
|
var initialValue = $el.data(metadata.defaultValue);
|
364
367
|
// Explicitly check for null/undefined here as value may be `false`, so ($el.data(dataInitialValue) || '') would not work
|
365
368
|
if (initialValue == null) { initialValue = ''; }
|
369
|
+
else if(Array.isArray(initialValue)) {
|
370
|
+
initialValue = initialValue.toString();
|
371
|
+
}
|
366
372
|
var currentValue = $el.val();
|
367
373
|
if (currentValue == null) { currentValue = ''; }
|
368
|
-
|
374
|
+
// multiple select values are returned as arrays which are never equal, so do string conversion first
|
375
|
+
else if(Array.isArray(currentValue)) {
|
376
|
+
currentValue = currentValue.toString();
|
377
|
+
}
|
369
378
|
// Boolean values can be encoded as "true/false" or "True/False" depending on underlying frameworks so we need a case insensitive comparison
|
370
379
|
var boolRegex = /^(true|false)$/i;
|
371
380
|
var isBoolValue = boolRegex.test(initialValue) && boolRegex.test(currentValue);
|
@@ -458,6 +467,9 @@ $.fn.form = function(parameters) {
|
|
458
467
|
module.timer = setTimeout(function() {
|
459
468
|
module.debug('Revalidating field', $field, module.get.validation($field));
|
460
469
|
module.validate.field( validationRules );
|
470
|
+
if(!settings.inline) {
|
471
|
+
module.validate.form(false,true);
|
472
|
+
}
|
461
473
|
}, settings.delay);
|
462
474
|
}
|
463
475
|
}
|
@@ -542,7 +554,7 @@ $.fn.form = function(parameters) {
|
|
542
554
|
name
|
543
555
|
;
|
544
556
|
if(requiresValue) {
|
545
|
-
prompt = prompt.replace(
|
557
|
+
prompt = prompt.replace(/\{value\}/g, $field.val());
|
546
558
|
}
|
547
559
|
if(requiresName) {
|
548
560
|
$label = $field.closest(selector.group).find('label').eq(0);
|
@@ -550,10 +562,10 @@ $.fn.form = function(parameters) {
|
|
550
562
|
? $label.text()
|
551
563
|
: $field.prop('placeholder') || settings.text.unspecifiedField
|
552
564
|
;
|
553
|
-
prompt = prompt.replace(
|
565
|
+
prompt = prompt.replace(/\{name\}/g, name);
|
554
566
|
}
|
555
|
-
prompt = prompt.replace(
|
556
|
-
prompt = prompt.replace(
|
567
|
+
prompt = prompt.replace(/\{identifier\}/g, field.identifier);
|
568
|
+
prompt = prompt.replace(/\{ruleValue\}/g, ancillary);
|
557
569
|
if(!rule.prompt) {
|
558
570
|
module.verbose('Using default validation prompt for type', prompt, ruleName);
|
559
571
|
}
|
@@ -703,7 +715,7 @@ $.fn.form = function(parameters) {
|
|
703
715
|
}
|
704
716
|
else {
|
705
717
|
if(isRadio) {
|
706
|
-
if(values[name] === undefined || values[name]
|
718
|
+
if(values[name] === undefined || values[name] === false) {
|
707
719
|
values[name] = (isChecked)
|
708
720
|
? value || true
|
709
721
|
: false
|
@@ -818,26 +830,36 @@ $.fn.form = function(parameters) {
|
|
818
830
|
module.add.field(name, rules);
|
819
831
|
},
|
820
832
|
field: function(name, rules) {
|
833
|
+
// Validation should have at least a standard format
|
834
|
+
if(validation[name] === undefined || validation[name].rules === undefined) {
|
835
|
+
validation[name] = {
|
836
|
+
rules: []
|
837
|
+
};
|
838
|
+
}
|
821
839
|
var
|
822
|
-
newValidation = {
|
840
|
+
newValidation = {
|
841
|
+
rules: []
|
842
|
+
}
|
823
843
|
;
|
824
844
|
if(module.is.shorthandRules(rules)) {
|
825
845
|
rules = Array.isArray(rules)
|
826
846
|
? rules
|
827
847
|
: [rules]
|
828
848
|
;
|
829
|
-
|
830
|
-
rules:
|
831
|
-
};
|
832
|
-
$.each(rules, function(index, rule) {
|
833
|
-
newValidation[name].rules.push({ type: rule });
|
849
|
+
$.each(rules, function(_index, rule) {
|
850
|
+
newValidation.rules.push({ type: rule });
|
834
851
|
});
|
835
852
|
}
|
836
853
|
else {
|
837
|
-
newValidation
|
854
|
+
newValidation.rules = rules.rules;
|
838
855
|
}
|
839
|
-
|
840
|
-
|
856
|
+
// For each new rule, check if there's not already one with the same type
|
857
|
+
$.each(newValidation.rules, function (_index, rule) {
|
858
|
+
if ($.grep(validation[name].rules, function(item){ return item.type == rule.type; }).length == 0) {
|
859
|
+
validation[name].rules.push(rule);
|
860
|
+
}
|
861
|
+
});
|
862
|
+
module.debug('Adding rules', newValidation.rules, validation);
|
841
863
|
},
|
842
864
|
fields: function(fields) {
|
843
865
|
var
|
@@ -905,6 +927,17 @@ $.fn.form = function(parameters) {
|
|
905
927
|
},
|
906
928
|
|
907
929
|
remove: {
|
930
|
+
errors: function() {
|
931
|
+
module.debug('Removing form error messages');
|
932
|
+
$message.empty();
|
933
|
+
},
|
934
|
+
states: function() {
|
935
|
+
$module.removeClass(className.error).removeClass(className.success);
|
936
|
+
if(!settings.inline) {
|
937
|
+
module.remove.errors();
|
938
|
+
}
|
939
|
+
module.determine.isDirty();
|
940
|
+
},
|
908
941
|
rule: function(field, rule) {
|
909
942
|
var
|
910
943
|
rules = Array.isArray(rule)
|
@@ -1106,6 +1139,32 @@ $.fn.form = function(parameters) {
|
|
1106
1139
|
asDirty: function() {
|
1107
1140
|
module.set.defaults();
|
1108
1141
|
module.set.dirty();
|
1142
|
+
},
|
1143
|
+
autoCheck: function() {
|
1144
|
+
module.debug('Enabling auto check on required fields');
|
1145
|
+
$field.each(function (_index, el) {
|
1146
|
+
var
|
1147
|
+
$el = $(el),
|
1148
|
+
$elGroup = $(el).closest($group),
|
1149
|
+
isCheckbox = ($el.filter(selector.checkbox).length > 0),
|
1150
|
+
isRequired = $el.prop('required') || $elGroup.hasClass(className.required) || $elGroup.parent().hasClass(className.required),
|
1151
|
+
isDisabled = $el.is(':disabled') || $elGroup.hasClass(className.disabled) || $elGroup.parent().hasClass(className.disabled),
|
1152
|
+
validation = module.get.validation($el),
|
1153
|
+
hasEmptyRule = validation
|
1154
|
+
? $.grep(validation.rules, function(rule) { return rule.type == "empty" }) !== 0
|
1155
|
+
: false,
|
1156
|
+
identifier = validation.identifier || $el.attr('id') || $el.attr('name') || $el.data(metadata.validate)
|
1157
|
+
;
|
1158
|
+
if (isRequired && !isDisabled && !hasEmptyRule && identifier !== undefined) {
|
1159
|
+
if (isCheckbox) {
|
1160
|
+
module.verbose("Adding 'checked' rule on field", identifier);
|
1161
|
+
module.add.rule(identifier, "checked");
|
1162
|
+
} else {
|
1163
|
+
module.verbose("Adding 'empty' rule on field", identifier);
|
1164
|
+
module.add.rule(identifier, "empty");
|
1165
|
+
}
|
1166
|
+
}
|
1167
|
+
});
|
1109
1168
|
}
|
1110
1169
|
},
|
1111
1170
|
|
@@ -1124,12 +1183,16 @@ $.fn.form = function(parameters) {
|
|
1124
1183
|
if( module.determine.isValid() ) {
|
1125
1184
|
module.debug('Form has no validation errors, submitting');
|
1126
1185
|
module.set.success();
|
1186
|
+
if(!settings.inline) {
|
1187
|
+
module.remove.errors();
|
1188
|
+
}
|
1127
1189
|
if(ignoreCallbacks !== true) {
|
1128
1190
|
return settings.onSuccess.call(element, event, values);
|
1129
1191
|
}
|
1130
1192
|
}
|
1131
1193
|
else {
|
1132
1194
|
module.debug('Form has errors');
|
1195
|
+
submitting = false;
|
1133
1196
|
module.set.error();
|
1134
1197
|
if(!settings.inline) {
|
1135
1198
|
module.add.errors(formErrors);
|
@@ -1168,13 +1231,7 @@ $.fn.form = function(parameters) {
|
|
1168
1231
|
module.debug('Using field name as identifier', identifier);
|
1169
1232
|
field.identifier = identifier;
|
1170
1233
|
}
|
1171
|
-
var isDisabled =
|
1172
|
-
$.each($field, function(){
|
1173
|
-
if(!$(this).prop('disabled')) {
|
1174
|
-
isDisabled = false;
|
1175
|
-
return false;
|
1176
|
-
}
|
1177
|
-
});
|
1234
|
+
var isDisabled = !$field.filter(':not(:disabled)').length;
|
1178
1235
|
if(isDisabled) {
|
1179
1236
|
module.debug('Field is disabled. Skipping', identifier);
|
1180
1237
|
}
|
@@ -1185,7 +1242,9 @@ $.fn.form = function(parameters) {
|
|
1185
1242
|
module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);
|
1186
1243
|
}
|
1187
1244
|
else if(field.rules !== undefined) {
|
1188
|
-
|
1245
|
+
if(showErrors) {
|
1246
|
+
$field.closest($group).removeClass(className.error);
|
1247
|
+
}
|
1189
1248
|
$.each(field.rules, function(index, rule) {
|
1190
1249
|
if( module.has.field(identifier)) {
|
1191
1250
|
var invalidFields = module.validate.rule(field, rule,true) || [];
|
@@ -1231,7 +1290,7 @@ $.fn.form = function(parameters) {
|
|
1231
1290
|
// cast to string avoiding encoding special values
|
1232
1291
|
value = (value === undefined || value === '' || value === null)
|
1233
1292
|
? ''
|
1234
|
-
: (settings.shouldTrim) ?
|
1293
|
+
: (settings.shouldTrim) ? String(value + '').trim() : String(value + '')
|
1235
1294
|
;
|
1236
1295
|
return ruleFunction.call(field, value, ancillary, $module);
|
1237
1296
|
}
|
@@ -1445,6 +1504,7 @@ $.fn.form.settings = {
|
|
1445
1504
|
transition : 'scale',
|
1446
1505
|
duration : 200,
|
1447
1506
|
|
1507
|
+
autoCheckRequired : false,
|
1448
1508
|
preventLeaving : false,
|
1449
1509
|
dateHandling : 'date', // 'date', 'input', 'formatter'
|
1450
1510
|
|
@@ -1511,7 +1571,7 @@ $.fn.form.settings = {
|
|
1511
1571
|
selector : {
|
1512
1572
|
checkbox : 'input[type="checkbox"], input[type="radio"]',
|
1513
1573
|
clear : '.clear',
|
1514
|
-
field : 'input, textarea, select',
|
1574
|
+
field : 'input:not(.search), textarea, select',
|
1515
1575
|
group : '.field',
|
1516
1576
|
input : 'input',
|
1517
1577
|
message : '.error.message',
|
@@ -1525,10 +1585,12 @@ $.fn.form.settings = {
|
|
1525
1585
|
},
|
1526
1586
|
|
1527
1587
|
className : {
|
1528
|
-
error
|
1529
|
-
label
|
1530
|
-
pressed
|
1531
|
-
success
|
1588
|
+
error : 'error',
|
1589
|
+
label : 'ui basic red pointing prompt label',
|
1590
|
+
pressed : 'down',
|
1591
|
+
success : 'success',
|
1592
|
+
required : 'required',
|
1593
|
+
disabled : 'disabled'
|
1532
1594
|
},
|
1533
1595
|
|
1534
1596
|
error: {
|
@@ -708,7 +708,15 @@ $.fn.modal = function(parameters) {
|
|
708
708
|
return module.cache.leftBodyScrollbar;
|
709
709
|
},
|
710
710
|
useFlex: function() {
|
711
|
-
|
711
|
+
if (settings.useFlex === 'auto') {
|
712
|
+
return settings.detachable && !module.is.ie();
|
713
|
+
}
|
714
|
+
if(settings.useFlex && module.is.ie()) {
|
715
|
+
module.debug('useFlex true is not supported in IE');
|
716
|
+
} else if(settings.useFlex && !settings.detachable) {
|
717
|
+
module.debug('useFlex true in combination with detachable false is not supported');
|
718
|
+
}
|
719
|
+
return settings.useFlex;
|
712
720
|
},
|
713
721
|
fit: function() {
|
714
722
|
var
|
@@ -510,9 +510,10 @@ $.fn.popup = function(parameters) {
|
|
510
510
|
$popupOffsetParent = module.get.offsetParent($popup),
|
511
511
|
targetElement = $target[0],
|
512
512
|
isWindow = ($boundary[0] == window),
|
513
|
-
|
514
|
-
|
515
|
-
|
513
|
+
targetOffset = $target.offset(),
|
514
|
+
parentOffset = settings.inline || (settings.popup && settings.movePopup)
|
515
|
+
? $target.offsetParent().offset()
|
516
|
+
: { top: 0, left: 0 },
|
516
517
|
screenPosition = (isWindow)
|
517
518
|
? { top: 0, left: 0 }
|
518
519
|
: $boundary.offset(),
|
@@ -528,8 +529,8 @@ $.fn.popup = function(parameters) {
|
|
528
529
|
element : $target[0],
|
529
530
|
width : $target.outerWidth(),
|
530
531
|
height : $target.outerHeight(),
|
531
|
-
top :
|
532
|
-
left :
|
532
|
+
top : targetOffset.top - parentOffset.top,
|
533
|
+
left : targetOffset.left - parentOffset.left,
|
533
534
|
margin : {}
|
534
535
|
},
|
535
536
|
// popup itself
|
@@ -1496,10 +1497,9 @@ $.fn.popup.settings = {
|
|
1496
1497
|
templates: {
|
1497
1498
|
escape: function(string) {
|
1498
1499
|
var
|
1499
|
-
badChars = /[
|
1500
|
+
badChars = /[<>"'`]/g,
|
1500
1501
|
shouldEscape = /[&<>"'`]/,
|
1501
1502
|
escape = {
|
1502
|
-
"&": "&",
|
1503
1503
|
"<": "<",
|
1504
1504
|
">": ">",
|
1505
1505
|
'"': """,
|
@@ -1511,6 +1511,7 @@ $.fn.popup.settings = {
|
|
1511
1511
|
}
|
1512
1512
|
;
|
1513
1513
|
if(shouldEscape.test(string)) {
|
1514
|
+
string = string.replace(/&(?![a-z0-9#]{1,6};)/, "&");
|
1514
1515
|
return string.replace(badChars, escapedChar);
|
1515
1516
|
}
|
1516
1517
|
return string;
|
@@ -169,7 +169,7 @@ $.fn.progress = function(parameters) {
|
|
169
169
|
value : module.helper.forceArray($module.data(metadata.value))
|
170
170
|
}
|
171
171
|
;
|
172
|
-
if(data.total) {
|
172
|
+
if(data.total !== undefined) {
|
173
173
|
module.debug('Total value set from metadata', data.total);
|
174
174
|
module.set.total(data.total);
|
175
175
|
}
|
@@ -272,18 +272,18 @@ $.fn.progress = function(parameters) {
|
|
272
272
|
var
|
273
273
|
index_ = index || 0,
|
274
274
|
value = module.get.value(index_),
|
275
|
-
total = module.total
|
275
|
+
total = module.get.total(),
|
276
276
|
percent = (animating)
|
277
277
|
? module.get.displayPercent(index_)
|
278
278
|
: module.get.percent(index_),
|
279
|
-
left = (
|
280
|
-
? (total - value)
|
279
|
+
left = (total !== false)
|
280
|
+
? Math.max(0,total - value)
|
281
281
|
: (100 - percent)
|
282
282
|
;
|
283
283
|
templateText = templateText || '';
|
284
284
|
templateText = templateText
|
285
285
|
.replace('{value}', value)
|
286
|
-
.replace('{total}', total)
|
286
|
+
.replace('{total}', total || 0)
|
287
287
|
.replace('{left}', left)
|
288
288
|
.replace('{percent}', percent)
|
289
289
|
.replace('{bar}', settings.text.bars[index_] || '')
|
@@ -373,7 +373,7 @@ $.fn.progress = function(parameters) {
|
|
373
373
|
return module.nextValue || module.value && module.value[index || 0] || 0;
|
374
374
|
},
|
375
375
|
total: function() {
|
376
|
-
return module.total
|
376
|
+
return module.total !== undefined ? module.total : false;
|
377
377
|
}
|
378
378
|
},
|
379
379
|
|
@@ -506,23 +506,23 @@ $.fn.progress = function(parameters) {
|
|
506
506
|
;
|
507
507
|
});
|
508
508
|
var hasTotal = module.has.total();
|
509
|
-
var
|
510
|
-
var
|
509
|
+
var totalPercent = module.helper.sum(percents);
|
510
|
+
var isMultipleValues = percents.length > 1 && hasTotal;
|
511
511
|
var sumTotal = module.helper.sum(module.helper.forceArray(module.value));
|
512
|
-
if (
|
512
|
+
if (isMultipleValues && sumTotal > module.total) {
|
513
513
|
// Sum values instead of pecents to avoid precision issues when summing floats
|
514
514
|
module.error(error.sumExceedsTotal, sumTotal, module.total);
|
515
|
-
} else if (!
|
516
|
-
// Sum before
|
517
|
-
module.error(error.tooHigh,
|
518
|
-
} else if (
|
519
|
-
module.error(error.tooLow,
|
515
|
+
} else if (!isMultipleValues && totalPercent > 100) {
|
516
|
+
// Sum before rounding since sum of rounded may have error though sum of actual is fine
|
517
|
+
module.error(error.tooHigh, totalPercent);
|
518
|
+
} else if (totalPercent < 0) {
|
519
|
+
module.error(error.tooLow, totalPercent);
|
520
520
|
} else {
|
521
521
|
var autoPrecision = settings.precision > 0
|
522
522
|
? settings.precision
|
523
|
-
:
|
523
|
+
: isMultipleValues
|
524
524
|
? module.helper.derivePrecision(Math.min.apply(null, module.value), module.total)
|
525
|
-
:
|
525
|
+
: 0;
|
526
526
|
|
527
527
|
// round display percentage
|
528
528
|
var roundedPercents = percents.map(function (percent) {
|
@@ -532,7 +532,7 @@ $.fn.progress = function(parameters) {
|
|
532
532
|
;
|
533
533
|
});
|
534
534
|
module.percent = roundedPercents;
|
535
|
-
if (
|
535
|
+
if (hasTotal) {
|
536
536
|
module.value = roundedPercents.map(function (percent) {
|
537
537
|
return (autoPrecision > 0)
|
538
538
|
? Math.round((percent / 100) * module.total * (10 * autoPrecision)) / (10 * autoPrecision)
|
@@ -541,11 +541,7 @@ $.fn.progress = function(parameters) {
|
|
541
541
|
});
|
542
542
|
if (settings.limitValues) {
|
543
543
|
module.value = module.value.map(function (value) {
|
544
|
-
return (
|
545
|
-
? 100
|
546
|
-
: (module.value < 0)
|
547
|
-
? 0
|
548
|
-
: module.value;
|
544
|
+
return Math.max(0, Math.min(100, value));
|
549
545
|
});
|
550
546
|
}
|
551
547
|
}
|
@@ -622,7 +618,7 @@ $.fn.progress = function(parameters) {
|
|
622
618
|
if (text !== undefined) {
|
623
619
|
$progress.text( module.get.text(text, index) );
|
624
620
|
}
|
625
|
-
else if (settings.label == 'ratio' && module.total) {
|
621
|
+
else if (settings.label == 'ratio' && module.has.total()) {
|
626
622
|
module.verbose('Adding ratio to bar label');
|
627
623
|
$progress.text( module.get.text(settings.text.ratio, index) );
|
628
624
|
}
|
@@ -752,7 +748,7 @@ $.fn.progress = function(parameters) {
|
|
752
748
|
}
|
753
749
|
value = module.get.normalizedValue(value);
|
754
750
|
if (hasTotal) {
|
755
|
-
percentComplete = (value / module.total) * 100;
|
751
|
+
percentComplete = module.total > 0 ? (value / module.total) * 100 : 100;
|
756
752
|
module.debug('Calculating percent complete from total', percentComplete);
|
757
753
|
}
|
758
754
|
else {
|