fomantic-ui-sass 2.8.7.1 → 2.8.8
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 +4 -0
- data/app/assets/javascripts/semantic-ui/calendar.js +9 -11
- data/app/assets/javascripts/semantic-ui/dimmer.js +8 -11
- data/app/assets/javascripts/semantic-ui/dropdown.js +191 -99
- data/app/assets/javascripts/semantic-ui/form.js +98 -60
- data/app/assets/javascripts/semantic-ui/modal.js +259 -16
- data/app/assets/javascripts/semantic-ui/nag.js +130 -64
- data/app/assets/javascripts/semantic-ui/popup.js +4 -4
- data/app/assets/javascripts/semantic-ui/progress.js +6 -8
- data/app/assets/javascripts/semantic-ui/search.js +14 -12
- data/app/assets/javascripts/semantic-ui/slider.js +55 -31
- data/app/assets/javascripts/semantic-ui/toast.js +26 -6
- data/app/assets/stylesheets/semantic-ui/collections/_breadcrumb.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/collections/_form.scss +46 -5
- data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +14 -7
- data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +6 -4
- data/app/assets/stylesheets/semantic-ui/collections/_message.scss +50 -3
- data/app/assets/stylesheets/semantic-ui/collections/_table.scss +6 -2
- data/app/assets/stylesheets/semantic-ui/elements/_button.scss +29 -2
- data/app/assets/stylesheets/semantic-ui/elements/_container.scss +3 -4
- data/app/assets/stylesheets/semantic-ui/elements/_divider.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_flag.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_header.scss +10 -5
- data/app/assets/stylesheets/semantic-ui/elements/_icon.scss +237 -65
- data/app/assets/stylesheets/semantic-ui/elements/_image.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_input.scss +2 -1
- data/app/assets/stylesheets/semantic-ui/elements/_label.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_list.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_loader.scss +41 -37
- data/app/assets/stylesheets/semantic-ui/elements/_placeholder.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_rail.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_reveal.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +34 -2
- data/app/assets/stylesheets/semantic-ui/elements/_step.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_text.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/globals/_reset.scss +2 -3
- data/app/assets/stylesheets/semantic-ui/globals/_site.scss +2 -2
- data/app/assets/stylesheets/semantic-ui/modules/_accordion.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_calendar.scss +3 -3
- data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +46 -4
- data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +72 -3
- data/app/assets/stylesheets/semantic-ui/modules/_embed.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +19 -8
- data/app/assets/stylesheets/semantic-ui/modules/_nag.scss +168 -16
- data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +4 -2
- data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +18 -10
- data/app/assets/stylesheets/semantic-ui/modules/_rating.scss +18 -33
- data/app/assets/stylesheets/semantic-ui/modules/_search.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_slider.scss +3 -1
- data/app/assets/stylesheets/semantic-ui/modules/_sticky.scss +1 -2
- data/app/assets/stylesheets/semantic-ui/modules/_tab.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_toast.scss +97 -10
- data/app/assets/stylesheets/semantic-ui/modules/_transition.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/views/_ad.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/views/_card.scss +74 -2
- data/app/assets/stylesheets/semantic-ui/views/_comment.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/views/_feed.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/views/_item.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +1 -1
- data/lib/fomantic/ui/sass/version.rb +2 -2
- metadata +6 -6
@@ -91,6 +91,7 @@ $.fn.form = function(parameters) {
|
|
91
91
|
else {
|
92
92
|
if(instance !== undefined) {
|
93
93
|
instance.invoke('destroy');
|
94
|
+
module.refresh();
|
94
95
|
}
|
95
96
|
module.verbose('Initializing form validation', $module, settings);
|
96
97
|
module.bindEvents();
|
@@ -171,11 +172,9 @@ $.fn.form = function(parameters) {
|
|
171
172
|
}
|
172
173
|
|
173
174
|
$field.on('change click keyup keydown blur', function(e) {
|
174
|
-
|
175
|
+
module.determine.isDirty();
|
175
176
|
});
|
176
177
|
|
177
|
-
$field.on('change.dirty click.dirty keyup.dirty keydown.dirty blur.dirty', module.determine.isDirty);
|
178
|
-
|
179
178
|
$module.on('dirty' + eventNamespace, function(e) {
|
180
179
|
settings.onDirty.call();
|
181
180
|
});
|
@@ -302,10 +301,6 @@ $.fn.form = function(parameters) {
|
|
302
301
|
module.set.clean();
|
303
302
|
}
|
304
303
|
|
305
|
-
if (e && e.namespace === 'dirty') {
|
306
|
-
e.stopImmediatePropagation();
|
307
|
-
e.preventDefault();
|
308
|
-
}
|
309
304
|
}
|
310
305
|
},
|
311
306
|
|
@@ -313,13 +308,6 @@ $.fn.form = function(parameters) {
|
|
313
308
|
bracketedRule: function(rule) {
|
314
309
|
return (rule.type && rule.type.match(settings.regExp.bracket));
|
315
310
|
},
|
316
|
-
shorthandFields: function(fields) {
|
317
|
-
var
|
318
|
-
fieldKeys = Object.keys(fields),
|
319
|
-
firstRule = fields[fieldKeys[0]]
|
320
|
-
;
|
321
|
-
return module.is.shorthandRules(firstRule);
|
322
|
-
},
|
323
311
|
// duck type rule test
|
324
312
|
shorthandRules: function(rules) {
|
325
313
|
return (typeof rules == 'string' || Array.isArray(rules));
|
@@ -422,7 +410,7 @@ $.fn.form = function(parameters) {
|
|
422
410
|
;
|
423
411
|
if( key == keyCode.escape) {
|
424
412
|
module.verbose('Escape key pressed blurring field');
|
425
|
-
$field
|
413
|
+
$field[0]
|
426
414
|
.blur()
|
427
415
|
;
|
428
416
|
}
|
@@ -444,15 +432,11 @@ $.fn.form = function(parameters) {
|
|
444
432
|
$fieldGroup = $field.closest($group),
|
445
433
|
validationRules = module.get.validation($field)
|
446
434
|
;
|
447
|
-
if( $fieldGroup.hasClass(className.error) ) {
|
435
|
+
if(validationRules && (settings.on == 'blur' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {
|
448
436
|
module.debug('Revalidating field', $field, validationRules);
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
}
|
453
|
-
else if(settings.on == 'blur') {
|
454
|
-
if(validationRules) {
|
455
|
-
module.validate.field( validationRules );
|
437
|
+
module.validate.field( validationRules );
|
438
|
+
if(!settings.inline) {
|
439
|
+
module.validate.form(false,true);
|
456
440
|
}
|
457
441
|
}
|
458
442
|
},
|
@@ -465,7 +449,7 @@ $.fn.form = function(parameters) {
|
|
465
449
|
if(validationRules && (settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {
|
466
450
|
clearTimeout(module.timer);
|
467
451
|
module.timer = setTimeout(function() {
|
468
|
-
module.debug('Revalidating field', $field,
|
452
|
+
module.debug('Revalidating field', $field, validationRules);
|
469
453
|
module.validate.field( validationRules );
|
470
454
|
if(!settings.inline) {
|
471
455
|
module.validate.form(false,true);
|
@@ -527,15 +511,19 @@ $.fn.form = function(parameters) {
|
|
527
511
|
fullFields = {}
|
528
512
|
;
|
529
513
|
$.each(fields, function(name, rules) {
|
530
|
-
if(typeof rules
|
531
|
-
|
514
|
+
if (!Array.isArray(rules) && typeof rules === 'object') {
|
515
|
+
fullFields[name] = rules;
|
516
|
+
} else {
|
517
|
+
if (typeof rules == 'string') {
|
518
|
+
rules = [rules];
|
519
|
+
}
|
520
|
+
fullFields[name] = {
|
521
|
+
rules: []
|
522
|
+
};
|
523
|
+
$.each(rules, function (index, rule) {
|
524
|
+
fullFields[name].rules.push({type: rule});
|
525
|
+
});
|
532
526
|
}
|
533
|
-
fullFields[name] = {
|
534
|
-
rules: []
|
535
|
-
};
|
536
|
-
$.each(rules, function(index, rule) {
|
537
|
-
fullFields[name].rules.push({ type: rule });
|
538
|
-
});
|
539
527
|
});
|
540
528
|
return fullFields;
|
541
529
|
},
|
@@ -551,8 +539,23 @@ $.fn.form = function(parameters) {
|
|
551
539
|
requiresValue = (prompt.search('{value}') !== -1),
|
552
540
|
requiresName = (prompt.search('{name}') !== -1),
|
553
541
|
$label,
|
554
|
-
name
|
542
|
+
name,
|
543
|
+
parts,
|
544
|
+
suffixPrompt
|
555
545
|
;
|
546
|
+
if(ancillary && ancillary.indexOf('..') >= 0) {
|
547
|
+
parts = ancillary.split('..', 2);
|
548
|
+
if(!rule.prompt) {
|
549
|
+
suffixPrompt = (
|
550
|
+
parts[0] === '' ? settings.prompt.maxValue.replace(/\{ruleValue\}/g,'{max}') :
|
551
|
+
parts[1] === '' ? settings.prompt.minValue.replace(/\{ruleValue\}/g,'{min}') :
|
552
|
+
settings.prompt.range
|
553
|
+
);
|
554
|
+
prompt += suffixPrompt.replace(/\{name\}/g, ' ' + settings.text.and);
|
555
|
+
}
|
556
|
+
prompt = prompt.replace(/\{min\}/g, parts[0]);
|
557
|
+
prompt = prompt.replace(/\{max\}/g, parts[1]);
|
558
|
+
}
|
556
559
|
if(requiresValue) {
|
557
560
|
prompt = prompt.replace(/\{value\}/g, $field.val());
|
558
561
|
}
|
@@ -588,7 +591,7 @@ $.fn.form = function(parameters) {
|
|
588
591
|
}
|
589
592
|
else {
|
590
593
|
// 2.x
|
591
|
-
if(parameters.fields
|
594
|
+
if(parameters.fields) {
|
592
595
|
parameters.fields = module.get.fieldsFromShorthand(parameters.fields);
|
593
596
|
}
|
594
597
|
settings = $.extend(true, {}, $.fn.form.settings, parameters);
|
@@ -616,7 +619,7 @@ $.fn.form = function(parameters) {
|
|
616
619
|
instance = $module.data(moduleNamespace);
|
617
620
|
|
618
621
|
// refresh selector cache
|
619
|
-
module.refresh();
|
622
|
+
(instance || module).refresh();
|
620
623
|
},
|
621
624
|
field: function(identifier) {
|
622
625
|
module.verbose('Finding field with identifier', identifier);
|
@@ -862,16 +865,7 @@ $.fn.form = function(parameters) {
|
|
862
865
|
module.debug('Adding rules', newValidation.rules, validation);
|
863
866
|
},
|
864
867
|
fields: function(fields) {
|
865
|
-
|
866
|
-
newValidation
|
867
|
-
;
|
868
|
-
if(fields && module.is.shorthandFields(fields)) {
|
869
|
-
newValidation = module.get.fieldsFromShorthand(fields);
|
870
|
-
}
|
871
|
-
else {
|
872
|
-
newValidation = fields;
|
873
|
-
}
|
874
|
-
validation = $.extend({}, validation, newValidation);
|
868
|
+
validation = $.extend({}, validation, module.get.fieldsFromShorthand(fields));
|
875
869
|
},
|
876
870
|
prompt: function(identifier, errors, internal) {
|
877
871
|
var
|
@@ -1165,6 +1159,14 @@ $.fn.form = function(parameters) {
|
|
1165
1159
|
}
|
1166
1160
|
}
|
1167
1161
|
});
|
1162
|
+
},
|
1163
|
+
optional: function(identifier, bool) {
|
1164
|
+
bool = (bool !== false);
|
1165
|
+
$.each(validation, function(fieldName, field) {
|
1166
|
+
if (identifier == fieldName || identifier == field.identifier) {
|
1167
|
+
field.optional = bool;
|
1168
|
+
}
|
1169
|
+
});
|
1168
1170
|
}
|
1169
1171
|
},
|
1170
1172
|
|
@@ -1201,6 +1203,24 @@ $.fn.form = function(parameters) {
|
|
1201
1203
|
if(event && $module.data('moduleApi') !== undefined) {
|
1202
1204
|
event.stopImmediatePropagation();
|
1203
1205
|
}
|
1206
|
+
if(settings.errorFocus) {
|
1207
|
+
var focusElement, hasTabIndex = true;
|
1208
|
+
if (typeof settings.errorFocus === 'string') {
|
1209
|
+
focusElement = $(settings.errorFocus);
|
1210
|
+
hasTabIndex = focusElement.is('[tabindex]');
|
1211
|
+
// to be able to focus/scroll into non input elements we need a tabindex
|
1212
|
+
if (!hasTabIndex) {
|
1213
|
+
focusElement.attr('tabindex',-1);
|
1214
|
+
}
|
1215
|
+
} else {
|
1216
|
+
focusElement = $group.filter('.' + className.error).first().find(selector.field);
|
1217
|
+
}
|
1218
|
+
focusElement.focus();
|
1219
|
+
// only remove tabindex if it was dynamically created above
|
1220
|
+
if (!hasTabIndex){
|
1221
|
+
focusElement.removeAttr('tabindex');
|
1222
|
+
}
|
1223
|
+
}
|
1204
1224
|
if(ignoreCallbacks !== true) {
|
1205
1225
|
return settings.onFailure.call(element, formErrors, values);
|
1206
1226
|
}
|
@@ -1290,7 +1310,7 @@ $.fn.form = function(parameters) {
|
|
1290
1310
|
// cast to string avoiding encoding special values
|
1291
1311
|
value = (value === undefined || value === '' || value === null)
|
1292
1312
|
? ''
|
1293
|
-
: (settings.shouldTrim) ? String(value + '').trim() : String(value + '')
|
1313
|
+
: (settings.shouldTrim && rule.shouldTrim !== false) || rule.shouldTrim ? String(value + '').trim() : String(value + '')
|
1294
1314
|
;
|
1295
1315
|
return ruleFunction.call(field, value, ancillary, $module);
|
1296
1316
|
}
|
@@ -1506,6 +1526,7 @@ $.fn.form.settings = {
|
|
1506
1526
|
|
1507
1527
|
autoCheckRequired : false,
|
1508
1528
|
preventLeaving : false,
|
1529
|
+
errorFocus : false,
|
1509
1530
|
dateHandling : 'date', // 'date', 'input', 'formatter'
|
1510
1531
|
|
1511
1532
|
onValid : function() {},
|
@@ -1534,12 +1555,16 @@ $.fn.form.settings = {
|
|
1534
1555
|
},
|
1535
1556
|
|
1536
1557
|
text: {
|
1558
|
+
and : 'and',
|
1537
1559
|
unspecifiedRule : 'Please enter a valid value',
|
1538
1560
|
unspecifiedField : 'This field',
|
1539
1561
|
leavingMessage : 'There are unsaved changes on this page which will be discarded if you continue.'
|
1540
1562
|
},
|
1541
1563
|
|
1542
1564
|
prompt: {
|
1565
|
+
range : '{name} must be in a range from {min} to {max}',
|
1566
|
+
maxValue : '{name} must have a maximum value of {ruleValue}',
|
1567
|
+
minValue : '{name} must have a minimum value of {ruleValue}',
|
1543
1568
|
empty : '{name} must have a value',
|
1544
1569
|
checked : '{name} must be checked',
|
1545
1570
|
email : '{name} must be a valid e-mail',
|
@@ -1571,9 +1596,9 @@ $.fn.form.settings = {
|
|
1571
1596
|
selector : {
|
1572
1597
|
checkbox : 'input[type="checkbox"], input[type="radio"]',
|
1573
1598
|
clear : '.clear',
|
1574
|
-
field : 'input:not(.search), textarea, select',
|
1599
|
+
field : 'input:not(.search):not([type="file"]), textarea, select',
|
1575
1600
|
group : '.field',
|
1576
|
-
input : 'input',
|
1601
|
+
input : 'input:not([type="file"])',
|
1577
1602
|
message : '.error.message',
|
1578
1603
|
prompt : '.prompt.label',
|
1579
1604
|
radio : 'input[type="radio"]',
|
@@ -1702,11 +1727,24 @@ $.fn.form.settings = {
|
|
1702
1727
|
}
|
1703
1728
|
return value.match( new RegExp(regExp, flags) );
|
1704
1729
|
},
|
1705
|
-
|
1730
|
+
minValue: function(value, range) {
|
1731
|
+
return $.fn.form.settings.rules.range(value, range+'..', 'number');
|
1732
|
+
},
|
1733
|
+
maxValue: function(value, range) {
|
1734
|
+
return $.fn.form.settings.rules.range(value, '..'+range, 'number');
|
1735
|
+
},
|
1706
1736
|
// is valid integer or matches range
|
1707
1737
|
integer: function(value, range) {
|
1738
|
+
return $.fn.form.settings.rules.range(value, range, 'integer');
|
1739
|
+
},
|
1740
|
+
range: function(value, range, regExp) {
|
1741
|
+
if(typeof regExp == "string") {
|
1742
|
+
regExp = $.fn.form.settings.regExp[regExp];
|
1743
|
+
}
|
1744
|
+
if(!(regExp instanceof RegExp)) {
|
1745
|
+
regExp = $.fn.form.settings.regExp.integer;
|
1746
|
+
}
|
1708
1747
|
var
|
1709
|
-
intRegExp = $.fn.form.settings.regExp.integer,
|
1710
1748
|
min,
|
1711
1749
|
max,
|
1712
1750
|
parts
|
@@ -1715,34 +1753,34 @@ $.fn.form.settings = {
|
|
1715
1753
|
// do nothing
|
1716
1754
|
}
|
1717
1755
|
else if(range.indexOf('..') == -1) {
|
1718
|
-
if(
|
1756
|
+
if(regExp.test(range)) {
|
1719
1757
|
min = max = range - 0;
|
1720
1758
|
}
|
1721
1759
|
}
|
1722
1760
|
else {
|
1723
1761
|
parts = range.split('..', 2);
|
1724
|
-
if(
|
1762
|
+
if(regExp.test(parts[0])) {
|
1725
1763
|
min = parts[0] - 0;
|
1726
1764
|
}
|
1727
|
-
if(
|
1765
|
+
if(regExp.test(parts[1])) {
|
1728
1766
|
max = parts[1] - 0;
|
1729
1767
|
}
|
1730
1768
|
}
|
1731
1769
|
return (
|
1732
|
-
|
1770
|
+
regExp.test(value) &&
|
1733
1771
|
(min === undefined || value >= min) &&
|
1734
1772
|
(max === undefined || value <= max)
|
1735
1773
|
);
|
1736
1774
|
},
|
1737
1775
|
|
1738
1776
|
// is valid number (with decimal)
|
1739
|
-
decimal: function(value) {
|
1740
|
-
return $.fn.form.settings.
|
1777
|
+
decimal: function(value, range) {
|
1778
|
+
return $.fn.form.settings.rules.range(value, range, 'decimal');
|
1741
1779
|
},
|
1742
1780
|
|
1743
1781
|
// is valid number
|
1744
|
-
number: function(value) {
|
1745
|
-
return $.fn.form.settings.
|
1782
|
+
number: function(value, range) {
|
1783
|
+
return $.fn.form.settings.rules.range(value, range, 'number');
|
1746
1784
|
},
|
1747
1785
|
|
1748
1786
|
// is value (case insensitive)
|
@@ -1947,8 +1985,8 @@ $.fn.form.settings = {
|
|
1947
1985
|
return;
|
1948
1986
|
}
|
1949
1987
|
|
1950
|
-
// allow dashes in card
|
1951
|
-
cardNumber = cardNumber.replace(/[\-]/g, '');
|
1988
|
+
// allow dashes and spaces in card
|
1989
|
+
cardNumber = cardNumber.replace(/[\s\-]/g, '');
|
1952
1990
|
|
1953
1991
|
// verify card types
|
1954
1992
|
if(requiredTypes) {
|