fomantic-ui-sass 2.8.2 → 2.8.7
Sign up to get free protection for your applications and to get access to all the features.
- 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 {
|