less-rails-semantic_ui 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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/assets/javascripts/semantic_ui/definitions/behaviors/api.js +22 -11
  3. data/assets/javascripts/semantic_ui/definitions/behaviors/form.js +259 -43
  4. data/assets/javascripts/semantic_ui/definitions/modules/checkbox.js +1 -1
  5. data/assets/javascripts/semantic_ui/definitions/modules/dropdown.js +204 -105
  6. data/assets/javascripts/semantic_ui/definitions/modules/popup.js +4 -3
  7. data/assets/javascripts/semantic_ui/definitions/modules/search.js +310 -152
  8. data/assets/javascripts/semantic_ui/definitions/modules/sidebar.js +18 -7
  9. data/assets/javascripts/semantic_ui/definitions/modules/sticky.js +1 -1
  10. data/assets/javascripts/semantic_ui/definitions/modules/transition.js +35 -23
  11. data/assets/stylesheets/semantic_ui/definitions/collections/form.less +2 -2
  12. data/assets/stylesheets/semantic_ui/definitions/collections/grid.less +30 -0
  13. data/assets/stylesheets/semantic_ui/definitions/collections/menu.less +13 -11
  14. data/assets/stylesheets/semantic_ui/definitions/elements/button.less +16 -2
  15. data/assets/stylesheets/semantic_ui/definitions/elements/header.less +70 -31
  16. data/assets/stylesheets/semantic_ui/definitions/elements/label.less +3 -3
  17. data/assets/stylesheets/semantic_ui/definitions/elements/list.less +8 -18
  18. data/assets/stylesheets/semantic_ui/definitions/modules/checkbox.less +54 -27
  19. data/assets/stylesheets/semantic_ui/definitions/modules/modal.less +2 -1
  20. data/assets/stylesheets/semantic_ui/definitions/modules/popup.less +5 -0
  21. data/assets/stylesheets/semantic_ui/definitions/modules/sidebar.less +1 -0
  22. data/assets/stylesheets/semantic_ui/definitions/modules/transition.less +0 -5
  23. data/assets/stylesheets/semantic_ui/themes/default/collections/menu.variables +7 -5
  24. data/assets/stylesheets/semantic_ui/themes/default/collections/table.variables +1 -1
  25. data/assets/stylesheets/semantic_ui/themes/default/elements/button.variables +2 -2
  26. data/assets/stylesheets/semantic_ui/themes/default/elements/header.variables +20 -9
  27. data/assets/stylesheets/semantic_ui/themes/default/elements/label.variables +5 -3
  28. data/assets/stylesheets/semantic_ui/themes/default/globals/site.variables +1 -0
  29. data/assets/stylesheets/semantic_ui/themes/default/modules/accordion.variables +5 -6
  30. data/assets/stylesheets/semantic_ui/themes/default/modules/modal.variables +3 -2
  31. data/assets/stylesheets/semantic_ui/themes/default/modules/popup.variables +3 -3
  32. data/assets/stylesheets/semantic_ui/themes/default/modules/transition.overrides +690 -222
  33. data/assets/stylesheets/semantic_ui/themes/default/modules/transition.variables +1 -1
  34. data/lib/less/rails/semantic_ui/version.rb +1 -1
  35. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ca069bc607e3806f27913df3c314668d698076f
4
- data.tar.gz: c08f712dec2c4f224cf584fa0abf7c1c5b0c2af2
3
+ metadata.gz: 8254f0e7f86e32460ee34f72bd4323d388d4ddf6
4
+ data.tar.gz: 8522354df588ab789219c997f457dbf8a5fc2d62
5
5
  SHA512:
6
- metadata.gz: 756b26b4f639a3eb113ca65f9334bd01e877ad22a213c221d6ced73bbb1b8f160bd7581c2ab29efb64520f46c8a864e22c6119b06cdec770b17a0c46df88109c
7
- data.tar.gz: c29a8ce7aa35ae49c5cdd612c6200bb0341d372fa060e573a3572a7592251beb298d9d30ff6c7c3dee3d29538abe7fcaab0bac7c2d7d8090981ef1f9556b656c
6
+ metadata.gz: e5e08d392da663417ed108123e089f63e42ee9866a5754db443b9d020f6686b9bf90524cdf0c8d784ea7d028c2fe38c8456a1d9ec85cc0a3c188b41fb8519603
7
+ data.tar.gz: b5e3920ab3c5fc2fcac8cc57d21abee89a557b6f5edf5653585eea924eadfa6be03c48a07e96c43437b8d173cfecfbe2f1e3c7e2220575545bb29ed270e81faf
@@ -83,7 +83,8 @@ $.api = $.fn.api = function(parameters) {
83
83
  .on(triggerEvent + eventNamespace, module.event.trigger)
84
84
  ;
85
85
  }
86
- else {
86
+ else if(settings.on == 'now') {
87
+ module.debug('Querying API now', triggerEvent);
87
88
  module.query();
88
89
  }
89
90
  }
@@ -181,17 +182,18 @@ $.api = $.fn.api = function(parameters) {
181
182
 
182
183
  module.verbose('Creating AJAX request with settings', ajaxSettings);
183
184
 
184
- if( !module.is.loading() ) {
185
- module.request = module.create.request();
186
- module.xhr = module.create.xhr();
187
- }
188
- else {
185
+ if( module.is.loading() ) {
189
186
  // throttle additional requests
190
187
  module.timer = setTimeout(function() {
191
188
  module.request = module.create.request();
192
189
  module.xhr = module.create.xhr();
193
190
  }, settings.throttle);
194
191
  }
192
+ else {
193
+ // immediately on first request
194
+ module.request = module.create.request();
195
+ module.xhr = module.create.xhr();
196
+ }
195
197
 
196
198
  },
197
199
 
@@ -421,7 +423,7 @@ $.api = $.fn.api = function(parameters) {
421
423
  ;
422
424
  },
423
425
  xhr: function() {
424
- $.ajax(ajaxSettings)
426
+ return $.ajax(ajaxSettings)
425
427
  .always(module.event.xhr.always)
426
428
  .done(module.event.xhr.done)
427
429
  .fail(module.event.xhr.fail)
@@ -548,7 +550,7 @@ $.api = $.fn.api = function(parameters) {
548
550
  var
549
551
  url
550
552
  ;
551
- action = action || $module.data(settings.metadata.action) || settings.action || false;
553
+ action = action || $module.data(metadata.action) || settings.action || false;
552
554
  if(action) {
553
555
  module.debug('Looking up url for action', action, settings.api);
554
556
  if(settings.api[action] !== undefined) {
@@ -563,6 +565,17 @@ $.api = $.fn.api = function(parameters) {
563
565
  }
564
566
  },
565
567
 
568
+ abort: function() {
569
+ var
570
+ xhr = module.get.xhr()
571
+ ;
572
+ if( xhr && xhr.state() !== 'resolved') {
573
+ module.debug('Cancelling API request');
574
+ xhr.abort();
575
+ module.request.rejectWith(settings.apiSettings);
576
+ }
577
+ },
578
+
566
579
  // reset state
567
580
  reset: function() {
568
581
  module.remove.error();
@@ -827,9 +840,7 @@ $.api.settings = {
827
840
  },
828
841
 
829
842
  metadata: {
830
- action : 'action',
831
- request : 'request',
832
- xhr : 'xhr'
843
+ action : 'action'
833
844
  }
834
845
  };
835
846
 
@@ -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
  }