fomantic-ui-sass 2.8.3 → 2.8.7.1

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.
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: {