semantic-ui-sass 1.7.3.0 → 1.8.0.0

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/app/assets/javascripts/semantic-ui/api.js +22 -11
  4. data/app/assets/javascripts/semantic-ui/checkbox.js +1 -1
  5. data/app/assets/javascripts/semantic-ui/dropdown.js +204 -105
  6. data/app/assets/javascripts/semantic-ui/form.js +259 -43
  7. data/app/assets/javascripts/semantic-ui/popup.js +4 -3
  8. data/app/assets/javascripts/semantic-ui/search.js +310 -152
  9. data/app/assets/javascripts/semantic-ui/sidebar.js +18 -7
  10. data/app/assets/javascripts/semantic-ui/sticky.js +1 -1
  11. data/app/assets/javascripts/semantic-ui/transition.js +35 -23
  12. data/app/assets/stylesheets/semantic-ui/collections/_breadcrumb.scss +1 -1
  13. data/app/assets/stylesheets/semantic-ui/collections/_form.scss +1 -1
  14. data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +31 -1
  15. data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +21 -20
  16. data/app/assets/stylesheets/semantic-ui/collections/_message.scss +1 -1
  17. data/app/assets/stylesheets/semantic-ui/collections/_table.scss +1 -1
  18. data/app/assets/stylesheets/semantic-ui/elements/_button.scss +15 -3
  19. data/app/assets/stylesheets/semantic-ui/elements/_divider.scss +1 -1
  20. data/app/assets/stylesheets/semantic-ui/elements/_flag.scss +1 -1
  21. data/app/assets/stylesheets/semantic-ui/elements/_header.scss +70 -31
  22. data/app/assets/stylesheets/semantic-ui/elements/_icon.scss +1 -1
  23. data/app/assets/stylesheets/semantic-ui/elements/_image.scss +1 -1
  24. data/app/assets/stylesheets/semantic-ui/elements/_input.scss +1 -1
  25. data/app/assets/stylesheets/semantic-ui/elements/_label.scss +11 -8
  26. data/app/assets/stylesheets/semantic-ui/elements/_list.scss +9 -19
  27. data/app/assets/stylesheets/semantic-ui/elements/_loader.scss +1 -1
  28. data/app/assets/stylesheets/semantic-ui/elements/_rail.scss +1 -1
  29. data/app/assets/stylesheets/semantic-ui/elements/_reveal.scss +1 -1
  30. data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +1 -1
  31. data/app/assets/stylesheets/semantic-ui/elements/_step.scss +1 -1
  32. data/app/assets/stylesheets/semantic-ui/globals/_reset.scss +1 -1
  33. data/app/assets/stylesheets/semantic-ui/globals/_site.scss +1 -1
  34. data/app/assets/stylesheets/semantic-ui/modules/_accordion.scss +7 -7
  35. data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +55 -28
  36. data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +1 -1
  37. data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +1 -1
  38. data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +2 -1
  39. data/app/assets/stylesheets/semantic-ui/modules/_nag.scss +1 -1
  40. data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +5 -2
  41. data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +1 -1
  42. data/app/assets/stylesheets/semantic-ui/modules/_rating.scss +1 -1
  43. data/app/assets/stylesheets/semantic-ui/modules/_search.scss +1 -1
  44. data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +1 -1
  45. data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +2 -1
  46. data/app/assets/stylesheets/semantic-ui/modules/_sticky.scss +1 -1
  47. data/app/assets/stylesheets/semantic-ui/modules/_tab.scss +1 -1
  48. data/app/assets/stylesheets/semantic-ui/modules/_transition.scss +1557 -538
  49. data/app/assets/stylesheets/semantic-ui/modules/_video.scss +1 -1
  50. data/app/assets/stylesheets/semantic-ui/views/_ad.scss +1 -1
  51. data/app/assets/stylesheets/semantic-ui/views/_card.scss +1 -1
  52. data/app/assets/stylesheets/semantic-ui/views/_comment.scss +1 -1
  53. data/app/assets/stylesheets/semantic-ui/views/_feed.scss +1 -1
  54. data/app/assets/stylesheets/semantic-ui/views/_item.scss +1 -1
  55. data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +1 -1
  56. data/lib/semantic/ui/sass/version.rb +2 -2
  57. metadata +2 -2
@@ -40,17 +40,21 @@ $.fn.form = function(fields, parameters) {
40
40
  $allModules
41
41
  .each(function() {
42
42
  var
43
- $module = $(this),
44
- $field = $(this).find(selector.field),
45
- $group = $(this).find(selector.group),
46
- $message = $(this).find(selector.message),
47
- $prompt = $(this).find(selector.prompt),
48
- $submit = $(this).find(selector.submit),
43
+ $module = $(this),
44
+ $field = $(this).find(selector.field),
45
+ $group = $(this).find(selector.group),
46
+ $message = $(this).find(selector.message),
47
+ $prompt = $(this).find(selector.prompt),
49
48
 
50
- formErrors = [],
49
+ $submit = $(this).find(selector.submit),
50
+ $clear = $(this).find(selector.clear),
51
+ $reset = $(this).find(selector.reset),
51
52
 
52
- element = this,
53
- instance = $module.data(moduleNamespace),
53
+ formErrors = [],
54
+ keyHeldDown = false,
55
+
56
+ element = this,
57
+ instance = $module.data(moduleNamespace),
54
58
  module
55
59
  ;
56
60
 
@@ -59,6 +63,7 @@ $.fn.form = function(fields, parameters) {
59
63
  initialize: function() {
60
64
  module.verbose('Initializing form validation', $module, validation, settings);
61
65
  module.bindEvents();
66
+ module.set.defaults();
62
67
  module.instantiate();
63
68
  },
64
69
 
@@ -101,7 +106,6 @@ $.fn.form = function(fields, parameters) {
101
106
  },
102
107
 
103
108
  bindEvents: function() {
104
-
105
109
  if(settings.keyboardShortcuts) {
106
110
  $field
107
111
  .on('keydown' + eventNamespace, module.event.field.keydown)
@@ -113,8 +117,11 @@ $.fn.form = function(fields, parameters) {
113
117
  $field
114
118
  .on('blur' + eventNamespace, module.event.field.blur)
115
119
  ;
116
- // attach submit events
120
+
121
+ // attach events to common elements
117
122
  module.attachEvents($submit, 'submit');
123
+ module.attachEvents($reset, 'reset');
124
+ module.attachEvents($clear, 'clear');
118
125
 
119
126
  $field
120
127
  .each(function() {
@@ -129,6 +136,78 @@ $.fn.form = function(fields, parameters) {
129
136
  ;
130
137
  },
131
138
 
139
+ clear: function() {
140
+ $field
141
+ .each(function () {
142
+ var
143
+ $field = $(this),
144
+ $element = $field.parent(),
145
+ $fieldGroup = $field.closest($group),
146
+ $prompt = $fieldGroup.find(selector.prompt),
147
+ defaultValue = $field.data(metadata.defaultValue) || '',
148
+ isCheckbox = $element.is(selector.uiCheckbox),
149
+ isDropdown = $element.is(selector.uiDropdown),
150
+ isErrored = $fieldGroup.hasClass(className.error)
151
+ ;
152
+ if(isErrored) {
153
+ module.verbose('Resetting error on field', $fieldGroup);
154
+ $fieldGroup.removeClass(className.error);
155
+ $prompt.remove();
156
+ }
157
+ if(isDropdown) {
158
+ module.verbose('Resetting dropdown value', $element, defaultValue);
159
+ $element.dropdown('clear');
160
+ }
161
+ else if(isCheckbox) {
162
+ $element.checkbox('uncheck');
163
+ }
164
+ else {
165
+ module.verbose('Resetting field value', $field, defaultValue);
166
+ $field.val('');
167
+ }
168
+ })
169
+ ;
170
+ },
171
+
172
+ reset: function() {
173
+ $field
174
+ .each(function () {
175
+ var
176
+ $field = $(this),
177
+ $element = $field.parent(),
178
+ $fieldGroup = $field.closest($group),
179
+ $prompt = $fieldGroup.find(selector.prompt),
180
+ defaultValue = $field.data(metadata.defaultValue) || '',
181
+ isCheckbox = $element.is(selector.uiCheckbox),
182
+ isDropdown = $element.is(selector.uiDropdown),
183
+ isErrored = $fieldGroup.hasClass(className.error)
184
+ ;
185
+ if(isErrored) {
186
+ module.verbose('Resetting error on field', $fieldGroup);
187
+ $fieldGroup.removeClass(className.error);
188
+ $prompt.remove();
189
+ }
190
+ if(isDropdown) {
191
+ module.verbose('Resetting dropdown value', $element, defaultValue);
192
+ $element.dropdown('restore defaults');
193
+ }
194
+ else if(isCheckbox) {
195
+ module.verbose('Resetting checkbox value', $element, defaultValue);
196
+ if(defaultValue === true) {
197
+ $element.checkbox('check');
198
+ }
199
+ else {
200
+ $element.checkbox('uncheck');
201
+ }
202
+ }
203
+ else {
204
+ module.verbose('Resetting field value', $field, defaultValue);
205
+ $field.val(defaultValue);
206
+ }
207
+ })
208
+ ;
209
+ },
210
+
132
211
  removeEvents: function() {
133
212
  $module
134
213
  .off(eventNamespace)
@@ -162,19 +241,22 @@ $.fn.form = function(fields, parameters) {
162
241
  ;
163
242
  }
164
243
  if(!event.ctrlKey && key == keyCode.enter && $field.is(selector.input) && $field.not(selector.checkbox).length > 0 ) {
165
- module.debug('Enter key pressed, submitting form');
166
244
  $submit
167
- .addClass(className.down)
168
- ;
169
- $field
170
- .one('keyup' + eventNamespace, module.event.field.keyup)
245
+ .addClass(className.pressed)
171
246
  ;
247
+ if(!keyHeldDown) {
248
+ $field
249
+ .one('keyup' + eventNamespace, module.event.field.keyup)
250
+ ;
251
+ module.submit();
252
+ module.debug('Enter pressed on input submitting form');
253
+ }
254
+ keyHeldDown = true;
172
255
  }
173
256
  },
174
257
  keyup: function() {
175
- module.verbose('Doing keyboard shortcut form submit');
176
- $submit.removeClass(className.down);
177
- module.submit();
258
+ keyHeldDown = false;
259
+ $submit.removeClass(className.pressed);
178
260
  },
179
261
  blur: function() {
180
262
  var
@@ -212,14 +294,17 @@ $.fn.form = function(fields, parameters) {
212
294
  return 'change';
213
295
  }
214
296
  else {
215
- return (document.createElement('input').oninput !== undefined)
216
- ? 'input'
217
- : (document.createElement('input').onpropertychange !== undefined)
218
- ? 'propertychange'
219
- : 'keyup'
220
- ;
297
+ return module.get.inputEvent();
221
298
  }
222
299
  },
300
+ inputEvent: function() {
301
+ return (document.createElement('input').oninput !== undefined)
302
+ ? 'input'
303
+ : (document.createElement('input').onpropertychange !== undefined)
304
+ ? 'propertychange'
305
+ : 'keyup'
306
+ ;
307
+ },
223
308
  field: function(identifier) {
224
309
  module.verbose('Finding field with identifier', identifier);
225
310
  if( $field.filter('#' + identifier).length > 0 ) {
@@ -243,6 +328,59 @@ $.fn.form = function(fields, parameters) {
243
328
  }
244
329
  });
245
330
  return rules || false;
331
+ },
332
+ value: function (field) {
333
+ var
334
+ fields = [],
335
+ results
336
+ ;
337
+ fields.push(field);
338
+ results = module.get.values.call(element, fields);
339
+ return results[field];
340
+ },
341
+ values: function (fields) {
342
+ var
343
+ values = {}
344
+ ;
345
+ // return all fields if no parameters
346
+ if(!$.isArray(fields)) {
347
+ fields = $field;
348
+ }
349
+ $.each(fields, function(index, field) {
350
+ var
351
+ $field = (typeof field === 'string')
352
+ ? module.get.field(field)
353
+ : $(field),
354
+ type = $field.prop('type'),
355
+ name = $field.prop('name'),
356
+ value = $field.val(),
357
+ isCheckbox = $field.is(selector.checkbox),
358
+ isRadio = $field.is(selector.radio),
359
+ isChecked = (isCheckbox)
360
+ ? $field.is(':checked')
361
+ : false
362
+ ;
363
+ if(name) {
364
+ if(isRadio) {
365
+ if(isChecked) {
366
+ values[name] = value;
367
+ }
368
+ }
369
+ else if(isCheckbox) {
370
+ if(isChecked) {
371
+ values[name] = true;
372
+ }
373
+ else {
374
+ module.debug('Omitted unchecked checkbox', $field);
375
+ return true;
376
+ }
377
+ }
378
+ else {
379
+ values[name] = value;
380
+ }
381
+ }
382
+ });
383
+ return values;
246
384
  }
247
385
  },
248
386
 
@@ -350,11 +488,74 @@ $.fn.form = function(fields, parameters) {
350
488
  .addClass(className.success)
351
489
  ;
352
490
  },
491
+ defaults: function () {
492
+ $field
493
+ .each(function () {
494
+ var
495
+ $field = $(this),
496
+ isCheckbox = ($field.filter(selector.checkbox).length > 0),
497
+ value = (isCheckbox)
498
+ ? $field.is(':checked')
499
+ : $field.val()
500
+ ;
501
+ $field.data(metadata.defaultValue, value);
502
+ })
503
+ ;
504
+ },
353
505
  error: function() {
354
506
  $module
355
507
  .removeClass(className.success)
356
508
  .addClass(className.error)
357
509
  ;
510
+ },
511
+ value: function (field, value) {
512
+ var
513
+ fields = {}
514
+ ;
515
+ fields[field] = value;
516
+ return module.set.values.call(element, fields);
517
+ },
518
+ values: function (fields) {
519
+ if($.isEmptyObject(fields)) {
520
+ return;
521
+ }
522
+ $.each(fields, function(key, value) {
523
+ var
524
+ $field = module.get.field(key),
525
+ $element = $field.parent(),
526
+ isCheckbox = $element.is(selector.uiCheckbox),
527
+ isDropdown = $element.is(selector.uiDropdown),
528
+ isRadio = $field.is(selector.radio),
529
+ fieldExists = ($field.length > 0)
530
+ ;
531
+ if(fieldExists) {
532
+ if(isRadio && isCheckbox) {
533
+ module.verbose('Selecting radio value', value, $field);
534
+ $field.filter('[value="' + value + '"]')
535
+ .parent(selector.uiCheckbox)
536
+ .checkbox('check')
537
+ ;
538
+ }
539
+ else if(isCheckbox) {
540
+ module.verbose('Setting checkbox value', value, $element);
541
+ if(value === true) {
542
+ $element.checkbox('check');
543
+ }
544
+ else {
545
+ $element.checkbox('uncheck');
546
+ }
547
+ }
548
+ else if(isDropdown) {
549
+ module.verbose('Setting dropdown value', value, $element);
550
+ $element.dropdown('set selected', value);
551
+ }
552
+ else {
553
+ module.verbose('Setting field value', value, $field);
554
+ $field.val(value);
555
+ }
556
+ }
557
+ });
558
+ module.validate.form();
358
559
  }
359
560
  },
360
561
 
@@ -365,6 +566,12 @@ $.fn.form = function(fields, parameters) {
365
566
  allValid = true,
366
567
  apiRequest
367
568
  ;
569
+
570
+ // input keydown event will fire submit repeatedly by browser default
571
+ if(keyHeldDown) {
572
+ return false;
573
+ }
574
+
368
575
  // reset errors
369
576
  formErrors = [];
370
577
  $.each(validation, function(fieldName, field) {
@@ -593,7 +800,7 @@ $.fn.form = function(fields, parameters) {
593
800
  }
594
801
  });
595
802
  }
596
- if ( $.isFunction( found ) ) {
803
+ if( $.isFunction( found ) ) {
597
804
  response = found.apply(context, passedArguments);
598
805
  }
599
806
  else if(found !== undefined) {
@@ -653,31 +860,36 @@ $.fn.form.settings = {
653
860
  transition : 'scale',
654
861
  duration : 200,
655
862
 
656
-
657
863
  onValid : function() {},
658
864
  onInvalid : function() {},
659
865
  onSuccess : function() { return true; },
660
866
  onFailure : function() { return false; },
661
867
 
662
868
  metadata : {
663
- validate: 'validate'
869
+ defaultValue : 'default',
870
+ validate : 'validate'
664
871
  },
665
872
 
666
873
  selector : {
667
- message : '.error.message',
668
- field : 'input, textarea, select',
669
- group : '.field',
670
- checkbox: 'input[type="checkbox"], input[type="radio"]',
671
- input : 'input',
672
- prompt : '.prompt.label',
673
- submit : '.submit'
874
+ checkbox : 'input[type="checkbox"], input[type="radio"]',
875
+ clear : '.clear',
876
+ field : 'input, textarea, select',
877
+ group : '.field',
878
+ input : 'input',
879
+ message : '.error.message',
880
+ prompt : '.prompt.label',
881
+ radio : 'input[type="radio"]',
882
+ reset : '.reset',
883
+ submit : '.submit',
884
+ uiCheckbox : '.ui.checkbox',
885
+ uiDropdown : '.ui.dropdown'
674
886
  },
675
887
 
676
888
  className : {
677
889
  error : 'error',
678
- success : 'success',
679
- down : 'down',
680
- label : 'ui prompt label'
890
+ label : 'ui prompt label',
891
+ pressed : 'down',
892
+ success : 'success'
681
893
  },
682
894
 
683
895
  error: {
@@ -685,6 +897,8 @@ $.fn.form.settings = {
685
897
  },
686
898
 
687
899
  templates: {
900
+
901
+ // template that produces error message
688
902
  error: function(errors) {
689
903
  var
690
904
  html = '<ul class="list">'
@@ -695,6 +909,8 @@ $.fn.form.settings = {
695
909
  html += '</ul>';
696
910
  return $(html);
697
911
  },
912
+
913
+ // template that produces label
698
914
  prompt: function(errors) {
699
915
  return $('<div/>')
700
916
  .addClass('ui red pointing prompt label')
@@ -737,20 +953,20 @@ $.fn.form.settings = {
737
953
  max,
738
954
  parts
739
955
  ;
740
- if (range === undefined || range === '' || range === '..') {
956
+ if(range === undefined || range === '' || range === '..') {
741
957
  // do nothing
742
958
  }
743
- else if (range.indexOf('..') == -1) {
744
- if (intRegExp.test(range)) {
959
+ else if(range.indexOf('..') == -1) {
960
+ if(intRegExp.test(range)) {
745
961
  min = max = range - 0;
746
962
  }
747
963
  }
748
964
  else {
749
965
  parts = range.split('..', 2);
750
- if (intRegExp.test(parts[0])) {
966
+ if(intRegExp.test(parts[0])) {
751
967
  min = parts[0] - 0;
752
968
  }
753
- if (intRegExp.test(parts[1])) {
969
+ if(intRegExp.test(parts[1])) {
754
970
  max = parts[1] - 0;
755
971
  }
756
972
  }
@@ -103,18 +103,18 @@ $.fn.popup = function(parameters) {
103
103
 
104
104
  refresh: function() {
105
105
  if(settings.popup) {
106
- $popup = $(settings.popup);
106
+ $popup = $(settings.popup).eq(0);
107
107
  }
108
108
  else {
109
109
  if(settings.inline) {
110
- $popup = $target.next(selector.popup);
110
+ $popup = $target.next(selector.popup).eq(0);
111
111
  }
112
112
  }
113
113
  if(settings.popup) {
114
114
  $popup.addClass(className.loading);
115
115
  $offsetParent = module.get.offsetParent();
116
116
  $popup.removeClass(className.loading);
117
- if(module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {
117
+ if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {
118
118
  module.debug('Moving popup to the same offset parent as activating element');
119
119
  $popup
120
120
  .detach()
@@ -1087,6 +1087,7 @@ $.fn.popup.settings = {
1087
1087
  },
1088
1088
 
1089
1089
  setFluidWidth : true,
1090
+ movePopup : true,
1090
1091
 
1091
1092
  target : false,
1092
1093
  popup : false,