less-rails-semantic_ui 1.7.3.0 → 1.8.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }