fomantic-ui-sass 2.8.3 → 2.8.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/README.md +6 -0
  4. data/app/assets/fonts/semantic-ui/brand-icons.eot +0 -0
  5. data/app/assets/fonts/semantic-ui/brand-icons.svg +95 -56
  6. data/app/assets/fonts/semantic-ui/brand-icons.ttf +0 -0
  7. data/app/assets/fonts/semantic-ui/brand-icons.woff +0 -0
  8. data/app/assets/fonts/semantic-ui/brand-icons.woff2 +0 -0
  9. data/app/assets/fonts/semantic-ui/icons.eot +0 -0
  10. data/app/assets/fonts/semantic-ui/icons.svg +121 -88
  11. data/app/assets/fonts/semantic-ui/icons.ttf +0 -0
  12. data/app/assets/fonts/semantic-ui/icons.woff +0 -0
  13. data/app/assets/fonts/semantic-ui/icons.woff2 +0 -0
  14. data/app/assets/fonts/semantic-ui/outline-icons.eot +0 -0
  15. data/app/assets/fonts/semantic-ui/outline-icons.svg +10 -10
  16. data/app/assets/fonts/semantic-ui/outline-icons.ttf +0 -0
  17. data/app/assets/fonts/semantic-ui/outline-icons.woff +0 -0
  18. data/app/assets/fonts/semantic-ui/outline-icons.woff2 +0 -0
  19. data/app/assets/javascripts/semantic-ui/calendar.js +249 -60
  20. data/app/assets/javascripts/semantic-ui/checkbox.js +1 -1
  21. data/app/assets/javascripts/semantic-ui/dimmer.js +3 -3
  22. data/app/assets/javascripts/semantic-ui/dropdown.js +62 -23
  23. data/app/assets/javascripts/semantic-ui/form.js +78 -26
  24. data/app/assets/javascripts/semantic-ui/modal.js +9 -1
  25. data/app/assets/javascripts/semantic-ui/popup.js +6 -5
  26. data/app/assets/javascripts/semantic-ui/progress.js +20 -24
  27. data/app/assets/javascripts/semantic-ui/search.js +28 -0
  28. data/app/assets/javascripts/semantic-ui/slider.js +2 -2
  29. data/app/assets/javascripts/semantic-ui/tab.js +3 -2
  30. data/app/assets/javascripts/semantic-ui/toast.js +9 -7
  31. data/app/assets/javascripts/semantic-ui/visibility.js +1 -1
  32. data/app/assets/stylesheets/semantic-ui/collections/_form.scss +79 -117
  33. data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +8 -6
  34. data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +36 -35
  35. data/app/assets/stylesheets/semantic-ui/collections/_message.scss +4 -4
  36. data/app/assets/stylesheets/semantic-ui/collections/_table.scss +23 -17
  37. data/app/assets/stylesheets/semantic-ui/elements/_all.scss +1 -0
  38. data/app/assets/stylesheets/semantic-ui/elements/_button.scss +9 -3
  39. data/app/assets/stylesheets/semantic-ui/elements/_emoji.scss +1 -1
  40. data/app/assets/stylesheets/semantic-ui/elements/_header.scss +8 -8
  41. data/app/assets/stylesheets/semantic-ui/elements/_icon.scss +124 -15
  42. data/app/assets/stylesheets/semantic-ui/elements/_image.scss +33 -4
  43. data/app/assets/stylesheets/semantic-ui/elements/_input.scss +48 -48
  44. data/app/assets/stylesheets/semantic-ui/elements/_label.scss +38 -2
  45. data/app/assets/stylesheets/semantic-ui/elements/_list.scss +12 -12
  46. data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +7 -1
  47. data/app/assets/stylesheets/semantic-ui/elements/_step.scss +16 -9
  48. data/app/assets/stylesheets/semantic-ui/elements/_text.scss +15 -0
  49. data/app/assets/stylesheets/semantic-ui/modules/_calendar.scss +16 -9
  50. data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +1 -0
  51. data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +17 -14
  52. data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +122 -32
  53. data/app/assets/stylesheets/semantic-ui/modules/_embed.scss +6 -6
  54. data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +10 -6
  55. data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +2 -0
  56. data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +32 -3
  57. data/app/assets/stylesheets/semantic-ui/modules/_search.scss +90 -0
  58. data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +1 -0
  59. data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +2 -1
  60. data/app/assets/stylesheets/semantic-ui/modules/_slider.scss +9 -0
  61. data/app/assets/stylesheets/semantic-ui/modules/_toast.scss +7 -7
  62. data/app/assets/stylesheets/semantic-ui/modules/_transition.scss +34 -34
  63. data/app/assets/stylesheets/semantic-ui/views/_card.scss +1 -1
  64. data/app/assets/stylesheets/semantic-ui/views/_feed.scss +5 -5
  65. data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +4 -4
  66. data/lib/fomantic/ui/sass/version.rb +2 -2
  67. metadata +6 -6
@@ -556,10 +556,10 @@ $.fn.checkbox = function(parameters) {
556
556
  trigger: {
557
557
  change: function() {
558
558
  var
559
- events = document.createEvent('HTMLEvents'),
560
559
  inputElement = $input[0]
561
560
  ;
562
561
  if(inputElement) {
562
+ var events = document.createEvent('HTMLEvents');
563
563
  module.verbose('Triggering native change event');
564
564
  events.initEvent('change', true, false);
565
565
  inputElement.dispatchEvent(events);
@@ -408,11 +408,11 @@ $.fn.dimmer = function(parameters) {
408
408
  var
409
409
  color = $dimmer.css('background-color'),
410
410
  colorArray = color.split(','),
411
- isRGB = (colorArray && colorArray.length == 3),
412
- isRGBA = (colorArray && colorArray.length == 4)
411
+ isRGB = (colorArray && colorArray.length >= 3)
413
412
  ;
414
413
  opacity = settings.opacity === 0 ? 0 : settings.opacity || opacity;
415
- if(isRGB || isRGBA) {
414
+ if(isRGB) {
415
+ colorArray[2] = colorArray[2].replace(')','');
416
416
  colorArray[3] = opacity + ')';
417
417
  color = colorArray.join(',');
418
418
  }
@@ -97,6 +97,7 @@ $.fn.dropdown = function(parameters) {
97
97
  id,
98
98
  selectObserver,
99
99
  menuObserver,
100
+ classObserver,
100
101
  module
101
102
  ;
102
103
 
@@ -117,7 +118,9 @@ $.fn.dropdown = function(parameters) {
117
118
  module.setup.layout();
118
119
 
119
120
  if(settings.values) {
121
+ module.set.initialLoad();
120
122
  module.change.values(settings.values);
123
+ module.remove.initialLoad();
121
124
  }
122
125
 
123
126
  module.refreshData();
@@ -160,15 +163,18 @@ $.fn.dropdown = function(parameters) {
160
163
  ;
161
164
  module.disconnect.menuObserver();
162
165
  module.disconnect.selectObserver();
166
+ module.disconnect.classObserver();
163
167
  },
164
168
 
165
169
  observeChanges: function() {
166
170
  if('MutationObserver' in window) {
167
171
  selectObserver = new MutationObserver(module.event.select.mutation);
168
172
  menuObserver = new MutationObserver(module.event.menu.mutation);
169
- module.debug('Setting up mutation observer', selectObserver, menuObserver);
173
+ classObserver = new MutationObserver(module.event.class.mutation);
174
+ module.debug('Setting up mutation observer', selectObserver, menuObserver, classObserver);
170
175
  module.observe.select();
171
176
  module.observe.menu();
177
+ module.observe.class();
172
178
  }
173
179
  },
174
180
 
@@ -182,6 +188,11 @@ $.fn.dropdown = function(parameters) {
182
188
  if(selectObserver) {
183
189
  selectObserver.disconnect();
184
190
  }
191
+ },
192
+ classObserver: function() {
193
+ if(classObserver) {
194
+ classObserver.disconnect();
195
+ }
185
196
  }
186
197
  },
187
198
  observe: {
@@ -200,6 +211,13 @@ $.fn.dropdown = function(parameters) {
200
211
  subtree : true
201
212
  });
202
213
  }
214
+ },
215
+ class: function() {
216
+ if(module.has.search() && classObserver) {
217
+ classObserver.observe($module[0], {
218
+ attributes : true
219
+ });
220
+ }
203
221
  }
204
222
  },
205
223
 
@@ -541,6 +559,7 @@ $.fn.dropdown = function(parameters) {
541
559
  } else if( module.can.click() ) {
542
560
  module.unbind.intent();
543
561
  }
562
+ iconClicked = false;
544
563
  },
545
564
 
546
565
  hideOthers: function() {
@@ -791,9 +810,9 @@ $.fn.dropdown = function(parameters) {
791
810
  values = [];
792
811
  }
793
812
  module.remove.message();
794
- module.setup.menu({
795
- values: values
796
- });
813
+ var menuConfig = {};
814
+ menuConfig[fields.values] = values;
815
+ module.setup.menu(menuConfig);
797
816
 
798
817
  if(values.length===0 && !settings.allowAdditions) {
799
818
  module.add.message(message.noResults);
@@ -989,7 +1008,9 @@ $.fn.dropdown = function(parameters) {
989
1008
  module.clear();
990
1009
  }
991
1010
  module.debug('Creating dropdown with specified values', values);
992
- module.setup.menu({values: values});
1011
+ var menuConfig = {};
1012
+ menuConfig[fields.values] = values;
1013
+ module.setup.menu(menuConfig);
993
1014
  $.each(values, function(index, item) {
994
1015
  if(item.selected == true) {
995
1016
  module.debug('Setting initial selection to', item[fields.value]);
@@ -1213,6 +1234,15 @@ $.fn.dropdown = function(parameters) {
1213
1234
  }
1214
1235
  }
1215
1236
  },
1237
+ class: {
1238
+ mutation: function(mutations) {
1239
+ mutations.forEach(function(mutation) {
1240
+ if(mutation.attributeName === "class") {
1241
+ module.check.disabled();
1242
+ }
1243
+ });
1244
+ }
1245
+ },
1216
1246
  select: {
1217
1247
  mutation: function(mutations) {
1218
1248
  module.debug('<select> modified, recreating menu');
@@ -1634,10 +1664,10 @@ $.fn.dropdown = function(parameters) {
1634
1664
  trigger: {
1635
1665
  change: function() {
1636
1666
  var
1637
- events = document.createEvent('HTMLEvents'),
1638
1667
  inputElement = $input[0]
1639
1668
  ;
1640
1669
  if(inputElement) {
1670
+ var events = document.createEvent('HTMLEvents');
1641
1671
  module.verbose('Triggering native change event');
1642
1672
  events.initEvent('change', true, false);
1643
1673
  inputElement.dispatchEvent(events);
@@ -1769,10 +1799,10 @@ $.fn.dropdown = function(parameters) {
1769
1799
  return $module.data(metadata.placeholderText) || '';
1770
1800
  },
1771
1801
  text: function() {
1772
- return $text.text();
1802
+ return settings.preserveHTML ? $text.html() : $text.text();
1773
1803
  },
1774
1804
  query: function() {
1775
- return $.trim($search.val());
1805
+ return String($search.val()).trim();
1776
1806
  },
1777
1807
  searchWidth: function(value) {
1778
1808
  value = (value !== undefined)
@@ -1915,8 +1945,8 @@ $.fn.dropdown = function(parameters) {
1915
1945
  return ($choice.data(metadata.text) !== undefined)
1916
1946
  ? $choice.data(metadata.text)
1917
1947
  : (preserveHTML)
1918
- ? $.trim($choice.html())
1919
- : $.trim($choice.text())
1948
+ ? $choice.html().trim()
1949
+ : $choice.text().trim()
1920
1950
  ;
1921
1951
  }
1922
1952
  },
@@ -1928,11 +1958,11 @@ $.fn.dropdown = function(parameters) {
1928
1958
  return ($choice.data(metadata.value) !== undefined)
1929
1959
  ? String( $choice.data(metadata.value) )
1930
1960
  : (typeof choiceText === 'string')
1931
- ? $.trim(
1961
+ ? String(
1932
1962
  settings.ignoreSearchCase
1933
1963
  ? choiceText.toLowerCase()
1934
1964
  : choiceText
1935
- )
1965
+ ).trim()
1936
1966
  : String(choiceText)
1937
1967
  ;
1938
1968
  },
@@ -1953,9 +1983,9 @@ $.fn.dropdown = function(parameters) {
1953
1983
  selectValues: function() {
1954
1984
  var
1955
1985
  select = {},
1956
- oldGroup = []
1986
+ oldGroup = [],
1987
+ values = []
1957
1988
  ;
1958
- select.values = [];
1959
1989
  $module
1960
1990
  .find('option')
1961
1991
  .each(function() {
@@ -1976,14 +2006,14 @@ $.fn.dropdown = function(parameters) {
1976
2006
  }
1977
2007
  else {
1978
2008
  if(group.length !== oldGroup.length || group[0] !== oldGroup[0]) {
1979
- select.values.push({
2009
+ values.push({
1980
2010
  type: 'header',
1981
2011
  divider: settings.headerDivider,
1982
2012
  name: group.attr('label') || ''
1983
2013
  });
1984
2014
  oldGroup = group;
1985
2015
  }
1986
- select.values.push({
2016
+ values.push({
1987
2017
  name : name,
1988
2018
  value : value,
1989
2019
  text : text,
@@ -1998,19 +2028,21 @@ $.fn.dropdown = function(parameters) {
1998
2028
  }
1999
2029
  if(settings.sortSelect) {
2000
2030
  if(settings.sortSelect === true) {
2001
- select.values.sort(function(a, b) {
2031
+ values.sort(function(a, b) {
2002
2032
  return a.name.localeCompare(b.name);
2003
2033
  });
2004
2034
  } else if(settings.sortSelect === 'natural') {
2005
- select.values.sort(function(a, b) {
2035
+ values.sort(function(a, b) {
2006
2036
  return (a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
2007
2037
  });
2008
2038
  } else if($.isFunction(settings.sortSelect)) {
2009
- select.values.sort(settings.sortSelect);
2039
+ values.sort(settings.sortSelect);
2010
2040
  }
2041
+ select[fields.values] = values;
2011
2042
  module.debug('Retrieved and sorted values from select', select);
2012
2043
  }
2013
2044
  else {
2045
+ select[fields.values] = values;
2014
2046
  module.debug('Retrieved values from select', select);
2015
2047
  }
2016
2048
  return select;
@@ -2075,7 +2107,7 @@ $.fn.dropdown = function(parameters) {
2075
2107
  return;
2076
2108
  }
2077
2109
  if(isMultiple) {
2078
- if($.inArray(module.escape.htmlEntities(String(optionValue)), value) !== -1) {
2110
+ if($.inArray(module.escape.htmlEntities(String(optionValue)), value.map(function(v){return String(v);})) !== -1) {
2079
2111
  $selectedItem = ($selectedItem)
2080
2112
  ? $selectedItem.add($choice)
2081
2113
  : $choice
@@ -2133,6 +2165,9 @@ $.fn.dropdown = function(parameters) {
2133
2165
  }
2134
2166
  }
2135
2167
  return true;
2168
+ },
2169
+ disabled: function(){
2170
+ $search.attr('tabindex',module.is.disabled() ? -1 : 0);
2136
2171
  }
2137
2172
  },
2138
2173
 
@@ -2398,8 +2433,8 @@ $.fn.dropdown = function(parameters) {
2398
2433
  module.debug('Added tabindex to searchable dropdown');
2399
2434
  $search
2400
2435
  .val('')
2401
- .attr('tabindex', 0)
2402
2436
  ;
2437
+ module.check.disabled();
2403
2438
  $menu
2404
2439
  .attr('tabindex', -1)
2405
2440
  ;
@@ -3530,9 +3565,12 @@ $.fn.dropdown = function(parameters) {
3530
3565
  module.set.scrollPosition(module.get.selectedItem(), true);
3531
3566
  }
3532
3567
  if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {
3568
+ var displayType = $module.hasClass('column') ? 'flex' : false;
3533
3569
  if(transition == 'none') {
3534
3570
  start();
3535
- $currentMenu.transition('show');
3571
+ $currentMenu.transition({
3572
+ displayType: displayType
3573
+ }).transition('show');
3536
3574
  callback.call(element);
3537
3575
  }
3538
3576
  else if($.fn.transition !== undefined && $module.transition('is supported')) {
@@ -3544,6 +3582,7 @@ $.fn.dropdown = function(parameters) {
3544
3582
  duration : settings.duration,
3545
3583
  queue : true,
3546
3584
  onStart : start,
3585
+ displayType: displayType,
3547
3586
  onComplete : function() {
3548
3587
  callback.call(element);
3549
3588
  }
@@ -4032,7 +4071,7 @@ $.fn.dropdown.settings = {
4032
4071
  message : '.message',
4033
4072
  menuIcon : '.dropdown.icon',
4034
4073
  search : 'input.search, .menu > .search > input, .menu input.search',
4035
- sizer : '> input.sizer',
4074
+ sizer : '> span.sizer',
4036
4075
  text : '> .text:not(.icon)',
4037
4076
  unselectable : '.disabled, .filtered',
4038
4077
  clearIcon : '> .remove.icon'
@@ -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 $.trim($field.val()) === '';
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, false);
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('{value}', $field.val());
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('{name}', name);
565
+ prompt = prompt.replace(/\{name\}/g, name);
554
566
  }
555
- prompt = prompt.replace('{identifier}', field.identifier);
556
- prompt = prompt.replace('{ruleValue}', ancillary);
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] == false) {
718
+ if(values[name] === undefined || values[name] === false) {
707
719
  values[name] = (isChecked)
708
720
  ? value || true
709
721
  : false
@@ -915,6 +927,17 @@ $.fn.form = function(parameters) {
915
927
  },
916
928
 
917
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
+ },
918
941
  rule: function(field, rule) {
919
942
  var
920
943
  rules = Array.isArray(rule)
@@ -1116,6 +1139,32 @@ $.fn.form = function(parameters) {
1116
1139
  asDirty: function() {
1117
1140
  module.set.defaults();
1118
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
+ });
1119
1168
  }
1120
1169
  },
1121
1170
 
@@ -1134,12 +1183,16 @@ $.fn.form = function(parameters) {
1134
1183
  if( module.determine.isValid() ) {
1135
1184
  module.debug('Form has no validation errors, submitting');
1136
1185
  module.set.success();
1186
+ if(!settings.inline) {
1187
+ module.remove.errors();
1188
+ }
1137
1189
  if(ignoreCallbacks !== true) {
1138
1190
  return settings.onSuccess.call(element, event, values);
1139
1191
  }
1140
1192
  }
1141
1193
  else {
1142
1194
  module.debug('Form has errors');
1195
+ submitting = false;
1143
1196
  module.set.error();
1144
1197
  if(!settings.inline) {
1145
1198
  module.add.errors(formErrors);
@@ -1178,13 +1231,7 @@ $.fn.form = function(parameters) {
1178
1231
  module.debug('Using field name as identifier', identifier);
1179
1232
  field.identifier = identifier;
1180
1233
  }
1181
- var isDisabled = true;
1182
- $.each($field, function(){
1183
- if(!$(this).prop('disabled')) {
1184
- isDisabled = false;
1185
- return false;
1186
- }
1187
- });
1234
+ var isDisabled = !$field.filter(':not(:disabled)').length;
1188
1235
  if(isDisabled) {
1189
1236
  module.debug('Field is disabled. Skipping', identifier);
1190
1237
  }
@@ -1195,7 +1242,9 @@ $.fn.form = function(parameters) {
1195
1242
  module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);
1196
1243
  }
1197
1244
  else if(field.rules !== undefined) {
1198
- $field.closest($group).removeClass(className.error);
1245
+ if(showErrors) {
1246
+ $field.closest($group).removeClass(className.error);
1247
+ }
1199
1248
  $.each(field.rules, function(index, rule) {
1200
1249
  if( module.has.field(identifier)) {
1201
1250
  var invalidFields = module.validate.rule(field, rule,true) || [];
@@ -1241,7 +1290,7 @@ $.fn.form = function(parameters) {
1241
1290
  // cast to string avoiding encoding special values
1242
1291
  value = (value === undefined || value === '' || value === null)
1243
1292
  ? ''
1244
- : (settings.shouldTrim) ? $.trim(value + '') : String(value + '')
1293
+ : (settings.shouldTrim) ? String(value + '').trim() : String(value + '')
1245
1294
  ;
1246
1295
  return ruleFunction.call(field, value, ancillary, $module);
1247
1296
  }
@@ -1455,6 +1504,7 @@ $.fn.form.settings = {
1455
1504
  transition : 'scale',
1456
1505
  duration : 200,
1457
1506
 
1507
+ autoCheckRequired : false,
1458
1508
  preventLeaving : false,
1459
1509
  dateHandling : 'date', // 'date', 'input', 'formatter'
1460
1510
 
@@ -1521,7 +1571,7 @@ $.fn.form.settings = {
1521
1571
  selector : {
1522
1572
  checkbox : 'input[type="checkbox"], input[type="radio"]',
1523
1573
  clear : '.clear',
1524
- field : 'input, textarea, select',
1574
+ field : 'input:not(.search), textarea, select',
1525
1575
  group : '.field',
1526
1576
  input : 'input',
1527
1577
  message : '.error.message',
@@ -1535,10 +1585,12 @@ $.fn.form.settings = {
1535
1585
  },
1536
1586
 
1537
1587
  className : {
1538
- error : 'error',
1539
- label : 'ui basic red pointing prompt label',
1540
- pressed : 'down',
1541
- success : 'success'
1588
+ error : 'error',
1589
+ label : 'ui basic red pointing prompt label',
1590
+ pressed : 'down',
1591
+ success : 'success',
1592
+ required : 'required',
1593
+ disabled : 'disabled'
1542
1594
  },
1543
1595
 
1544
1596
  error: {