uber_select_rails 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55d7f2ac671dfba382d9ce1d1bd226fcac0b92d3c7473e720f1c200a398234e3
4
- data.tar.gz: ff3372fdb170c871823be80159c2c654d2982a8354e76442e16ec9337c250160
3
+ metadata.gz: 1e37c667b8e66ed1dda23bb261ff4afd711edd8ada1158a6eee77a44aae2573e
4
+ data.tar.gz: f51b530782b7e0ea3cd97934de9fe06f91c8fbe1fdb1cfee49ac75867770eb7f
5
5
  SHA512:
6
- metadata.gz: 95851208aa9e978b3c544b818d27865d1015df4b62ccdc9c83aa35874f7bbd539c23dac85441aa2f9703ff7c741fb9e61d916900a619a5cd4de19ddddbf33485
7
- data.tar.gz: f4d6512cb2e83c586eb5d462292d47490bf76d3526dcdef559c49a0df5839d2f0748984208bb3581aecafc985e77560cf63c57b8410b55d33cfc1003df02d6c2
6
+ metadata.gz: ba59b1dee8c43c50a6a1df171cddc362ba5b4297f0cbaa58bd0e9d306ab19ae138f121171067be89187cf29d152115db114bfe870ebda34300f5ef73b9508d65
7
+ data.tar.gz: 64924a5caf7106dc0005a2d93f7fa105f9b00e10a2629c0bced95e833a72554a553db0eb029c32ad1cba71aa78d82d272c21eb89619a80ccfe762f48aae1b80c
@@ -1,3 +1,3 @@
1
1
  module UberSelectRails
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
3
3
  end
@@ -3,13 +3,16 @@
3
3
  UberSelect is a fancy UI on top of a regular `<select>` element.
4
4
 
5
5
  ## Requirements
6
+
6
7
  Tested on jQuery 1.11.x to 3.3.x
7
8
 
8
9
  ## Parts
10
+
9
11
  UberSelect is composed of two main parts, an UberSearch that does all the of searching and UI, and an UberSelect which
10
12
  is used to connect an UberSearch to a `<select>` element.
11
13
 
12
14
  ### UberSelect
15
+
13
16
  This is the object that allows an UberSearch and a `<select>` element to work together. The select element can be used
14
17
  to control the state of the UberSearch, and vice-versa. This means you can programmatically change the state of the
15
18
  select, and UberSearch will update. Users can interact with the UberSearch, and the select will update. This also means
@@ -22,38 +25,46 @@ $('.my_selects').uberSelect(options);
22
25
  ```
23
26
 
24
27
  #### Attributes <a name="UberSearch attributes"></a>
28
+
25
29
  Attribtes on the outermost element can be specified by setting the `data-uber-attributes` attribute on the `<select>` element. Values should be passed
26
30
  as a JSON string of key/value pairs where the key is the attribute name and the value is the attribute value.
27
31
 
28
32
  #### Options
33
+
29
34
  Options can be specified by setting the `data-uber-options` attribute on the `<select>` element. Values should be passed
30
35
  as a JSON string. All options on the are passed to the underlying UberSearch, see [UberSearch options](#UberSearchOptions).
31
36
 
32
37
  - ##### prepopulateSearchOnOpen
38
+
33
39
  Determines whether the search input starts with the selected value in it when the pane is opened.
34
40
 
35
41
  Default: `false`
36
42
 
37
43
  - ##### clearSearchClearsSelect
44
+
38
45
  Determines whether the select value should be cleared when the search is cleared.
39
46
 
40
47
  Default: `false`
41
48
 
42
49
  - ##### placeholder
50
+
43
51
  Placeholder to show in the selected text area.
44
52
 
45
53
  Default: `<select>` element attributes `<select placeholder="my placeholder" data-placeholder="my placeholder">`
46
54
 
47
55
  - ##### dataUrl
56
+
48
57
  A url to pre-fetch select options from. JSON response should be of the form
49
58
  `[{text:'option with explicit value', value: 'some value'}, {text:'option with implicit value'}]`. For a custom JSON response, use in conjunction with optionFromDatum.
50
59
 
51
60
  Default: `null`
52
61
 
53
62
  - ##### optionFromDatum
63
+
54
64
  A function that is used to customize the options value and text built from a JSON response. `datum` is a single result returned from the JSON response.
55
65
 
56
66
  The function signature is as follows:
67
+
57
68
  ```js
58
69
  function(datum) {
59
70
  return // a <option> element to represent the select
@@ -63,25 +74,36 @@ as a JSON string. All options on the are passed to the underlying UberSearch, se
63
74
  Default: `datum.value` populates the `<option>` value, `datum.text` populates the `<option>` text.
64
75
 
65
76
  - ##### value
77
+
66
78
  Initialize the UberSearch with this selected value
67
79
 
68
80
  Default: `<select>` element `value` property
69
81
 
82
+ - ##### ariaLabel
83
+
84
+ Add an aria-label attribute with this value to the uber_select element.
85
+
70
86
  #### Events Triggered
87
+
71
88
  - ##### uber-select:ready
89
+
72
90
  This fires when the UberSelect has initialized and is ready for user interaction
73
91
 
74
92
  #### Events Observed
93
+
75
94
  The `<select>` element observes the following events:
76
95
 
77
96
  - ##### uber-select:refreshOptions
97
+
78
98
  The UberSearch options list will be updated to match the `<select>` element's `<option>` list.
79
99
 
80
100
  - ##### uber-select:refresh
101
+
81
102
  The UberSearch will update its selected value to match the `<select>` element's. This handler also runs when the
82
103
  `<select>` element triggers a `change` event.
83
104
 
84
105
  ### UberSearch
106
+
85
107
  The UberSearch performs all of the heavy lifting. It creates the UI views, maintains state, and performs the searching.
86
108
  It can be instantiated without the use of an UberSelect, which can be useful for situations where the selected value is
87
109
  being used in purely in JS, and not being linked to a `<select>` element in a form.
@@ -93,117 +115,143 @@ new UberSearch(data, options);
93
115
  ```
94
116
 
95
117
  #### Data
118
+
96
119
  Data is an array of objects. Each object may have the following properties:
97
120
 
98
121
  - ##### text
122
+
99
123
  String shown to the user in the list of results. This value is required if *value* is not provided.
100
124
 
101
125
  - ##### selectedText
126
+
102
127
  String shown to the user in the output container when this option is selected. *optional*
103
128
 
104
129
  - ##### title
130
+
105
131
  Title text shown to the user when hovering over the result. *optional*
106
132
 
107
133
  - ##### value
134
+
108
135
  This is matched against the *value* option passed UberSearch and will appear selected if it matches. It is also used to match against search input text when the user searches. This value is required if *text* is not provided.
109
136
 
110
137
  - ##### matchValue
138
+
111
139
  This overrides the value used to match against search input text when the user searches. *optional*
112
140
 
113
141
  - ##### visibility
142
+
114
143
  This is used to determine whether the option appears only when searching or only when not searching. Values accepted: `query`, `no-query`. *optional*
115
144
 
116
145
  - ##### disabled
146
+
117
147
  This is used to determine whether the option appears disabled. *optional*
118
148
 
119
149
  - ##### group
150
+
120
151
  This is used to visually group options. All options with the same group will appear together. *optional*
121
152
 
122
153
  #### Methods
123
154
 
124
155
  - ##### setData(data)
125
- Sets the data. `data` should be an Array conforming to the specifications described in <a href="#data">Data</a>
126
156
 
157
+ Sets the data. `data` should be an Array conforming to the specifications described in <a href="#data">Data</a>
127
158
 
128
159
  #### Options <a name="UberSearch options"></a>
160
+
129
161
  Options can be specified by setting the `data-uber-options` attribute on the `<select>` element. Values should be passed
130
162
  as a JSON string.
131
163
 
132
164
  - ##### value
165
+
133
166
  Sets the initially selected value of the UberSearch. This value should match the `value` property of the desired
134
167
  option data.
135
168
 
136
169
  Default: `null`
137
170
 
138
171
  - ##### search
172
+
139
173
  Determines whether the search input be shown.
140
174
 
141
175
  Default: `true`
142
176
 
143
177
  - ##### clearSearchButton
178
+
144
179
  Sets the text content of clear search button.
145
180
 
146
181
  Default: `✕`
147
182
 
148
183
  - ##### selectCaret
184
+
149
185
  Sets the text content of clear select caret.
150
186
 
151
187
  Default: `⌄`
152
188
 
153
189
  - ##### hideBlankOption
190
+
154
191
  Sets whether blank options should be hidden automatically.
155
192
 
156
193
  Default: `false`
157
194
 
158
195
  - ##### treatBlankOptionAsPlaceholder
196
+
159
197
  Determines whether the `text` property of an option with a blank `value` property should be used as the placeholder
160
198
  text if no placeholder is specified.
161
199
 
162
200
  Default: `false`
163
201
 
164
202
  - ##### highlightByDefault
203
+
165
204
  Determines whether the first search result be auto-highlighted.
166
205
 
167
206
  Default: `true`
168
207
 
169
208
  - ##### minQueryLength
209
+
170
210
  Sets minimum number of characters the user must type before a search will be performed.
171
211
 
172
212
  Default: `0`
173
213
 
174
214
  - ##### minQueryMessage
215
+
175
216
  Sets the message shown to the user when the query doesn't exceed the minimum length. `true` for a default message,
176
217
  `false` for none, or provide a string to set a custom message.
177
218
 
178
219
  Default: `true`
179
220
 
180
221
  - ##### placeholder
222
+
181
223
  Sets the placeholder shown in the selected text area.
182
224
 
183
225
  Default: `null`
184
226
 
185
227
  - ##### searchPlaceholder
228
+
186
229
  Sets the placeholder shown in the search input.
187
230
 
188
231
  Default: `'Type to search'`
189
232
 
190
233
  - ##### noResultsText
234
+
191
235
  Sets the message shown when there are no results.
192
236
 
193
237
  Default: `'No Matches Found'`
194
238
 
195
239
  - ##### noDataText
240
+
196
241
  Sets the text to show when the results list is empty and no search is in progress
197
242
 
198
243
  Default: `'No options'`
199
244
 
200
245
  - ##### searchInputAttributes
246
+
201
247
  An Object containing attributes to add to the search input element.
202
248
 
203
249
  - ##### buildResult
250
+
204
251
  A function that is used to build result elements.
205
252
 
206
253
  The function signature is as follows:
254
+
207
255
  ```js
208
256
  function(listOptionData) {
209
257
  return // HTML/element to insert into the the results list
@@ -211,10 +259,12 @@ as a JSON string.
211
259
  ```
212
260
 
213
261
  - ##### resultPostprocessor
262
+
214
263
  A function that is run after a result is built and can be used to decorate it. This can be useful when extending the
215
264
  functionality of an existing UberSearch implementation.
216
265
 
217
266
  The function signature is as follows:
267
+
218
268
  ```js
219
269
  function(resultsListElement, listOptionData) { }
220
270
  ```
@@ -222,50 +272,63 @@ as a JSON string.
222
272
  Default: No-op
223
273
 
224
274
  - ##### onRender
275
+
225
276
  A function to run when the results container is rendered. If the result returns false, the default `select` event
226
277
  handler is not run and the event is cancelled.
227
278
 
228
279
  The function signature is as follows:
280
+
229
281
  ```js
230
282
  function(resultsContainer, searchResultsHTML) { }
231
283
  ```
232
284
 
233
285
  - ##### onSelect
286
+
234
287
  A function to run when a result is selected. If the result returns false, the default `select` event handler is not
235
288
  run and the event is cancelled.
236
289
 
237
290
  The function signature is as follows:
291
+
238
292
  ```js
239
293
  function(listOptionData, resultsListElement, clickEvent) { }
240
294
  ```
241
295
 
242
296
  - ##### onNoHighlightSubmit
297
+
243
298
  A function to run when a user presses enter without selecting a result.
244
299
  Should be used in combination with `highlightByDefault: false`.
245
300
 
246
301
  The function signature is as follows:
302
+
247
303
  ```js
248
304
  function(value) { }
249
305
  ```
250
306
 
251
307
  - ##### outputContainer (Deprecated)
308
+
252
309
  An object that receives the output once a result is selected. Must respond to `setValue(value)` and `view()`. This object serves to
253
310
  attach the result list to the DOM at the desired location.
254
311
 
255
312
  #### Events Triggered
313
+
256
314
  - ##### shown
315
+
257
316
  This fires when the UberSearch pane is opened.
258
317
 
259
318
  - ##### renderedResults
319
+
260
320
  This fires each time the list of results is updated.
261
321
 
262
322
  - ##### clear
323
+
263
324
  This fires when the user clicks the clear search button.
264
325
 
265
326
  - ##### select
327
+
266
328
  This fires when the user selects a result.
267
329
 
268
330
  The handler function signature is as follows:
331
+
269
332
  ```js
270
333
  function(event, [listOptionData, resultsContainer, originalEvent]) { }
271
334
  ```
@@ -7,7 +7,7 @@ function List(options) {
7
7
  // BEHAVIOUR
8
8
 
9
9
  // Handle up and down arrow key presses
10
- $(options.keypressInput).on('keydown', function(event){
10
+ $(options.keypressInput || view).on('keydown', function(event){
11
11
  switch (event.which) {
12
12
  case 38: // Up Arrow
13
13
  stepHighlight(-1, true)
@@ -50,7 +50,7 @@ function List(options) {
50
50
 
51
51
  // Can be overridden to format how results are built
52
52
  this.buildResult = function(datum){
53
- return $('<li></li>').html(datum).addClass('result')
53
+ return $('<li role="option" class="result" tabindex="0"></li>').html(datum)
54
54
  }
55
55
 
56
56
  this.unhighlightResults = unhighlightResults
@@ -73,6 +73,7 @@ function List(options) {
73
73
  if (!result.length) { return }
74
74
 
75
75
  result.addClass('highlighted')
76
+ result.attr("aria-selected", true)
76
77
 
77
78
  if (options.scroll){
78
79
  scrollResultIntoView(result)
@@ -80,7 +81,7 @@ function List(options) {
80
81
  }
81
82
 
82
83
  function unhighlightResults(){
83
- highlightedResult().removeClass('highlighted')
84
+ highlightedResult().removeClass('highlighted').attr("aria-selected", false)
84
85
  }
85
86
 
86
87
  function highlightedResult(){
@@ -1,6 +1,6 @@
1
1
  var OutputContainer = function(options){
2
2
  options = $.extend({}, options)
3
- var view = $('<span class="selected_text_container" tabindex=0 role="button"></span>')
3
+ var view = $('<span class="selected_text_container" tabindex="0"></span>')
4
4
  var selectedText = $('<span class="selected_text"></span>').appendTo(view)
5
5
  var selectCaret = $('<span class="select_caret"></span>').appendTo(view).html(options.selectCaret)
6
6
 
@@ -3,40 +3,31 @@ function Pane(options){
3
3
  trigger: null
4
4
  }, options)
5
5
 
6
- var context = this
7
- var model = this.model = {}
8
- var isOpen = false
9
- var view = this.view = $('<div class="pane"></div>').toggle(isOpen)
6
+ var context = this
7
+ var model = {}
8
+ var isOpen = false
9
+ var view = $('<div class="pane"></div>').toggle(isOpen)
10
10
  var innerPane = $('<div class="pane_inner"></div>').appendTo(view)
11
11
 
12
12
 
13
13
  // PUBLIC INTERFACE
14
14
 
15
- $.extend(this, {view: view, addContent: addContent, removeContent: removeContent, show: show, hide: hide})
15
+ $.extend(this, {
16
+ model: model,
17
+ view: view,
18
+ addContent: addContent,
19
+ removeContent: removeContent,
20
+ show: show,
21
+ hide: hide,
22
+ toggle: toggle,
23
+ isOpen: paneIsOpen,
24
+ isClosed: paneIsClosed
25
+ })
16
26
 
17
27
 
18
28
  // BEHAVIOUR
19
29
 
20
- if (options.trigger){
21
- // Show the pane when the select element is clicked
22
- $(options.trigger).on('click', function(event){
23
- if ($(options.trigger).hasClass('disabled')) { return }
24
-
25
- context.show()
26
- })
27
-
28
- // Show the pane if the user was tabbed onto the trigger and pressed enter or space
29
- $(options.trigger).on('keyup', function(event){
30
- if ($(options.trigger).hasClass('disabled')) { return }
31
-
32
- if (event.which == 13 || event.which == 32){
33
- context.show()
34
- return false
35
- }
36
- })
37
- }
38
-
39
- // Hide the pane when clicked out
30
+ // Hide the pane when clicked out
40
31
  $(document).on('mousedown', function(event){
41
32
  if (isEventOutsidePane(event) && isEventOutsideTrigger(event)){
42
33
  context.hide()
@@ -52,13 +43,21 @@ function Pane(options){
52
43
  $(document).on('keyup', function(event){
53
44
  if (event.which == 27 && isOpen){
54
45
  context.hide()
55
- options.trigger.focus()
46
+ return false
56
47
  }
57
48
  })
58
49
 
59
50
 
60
51
  // HELPER FUNCTIONS
61
52
 
53
+ function paneIsOpen(){
54
+ return isOpen
55
+ }
56
+
57
+ function paneIsClosed(){
58
+ return !isOpen
59
+ }
60
+
62
61
  function addContent(name, content){
63
62
  model[name] = content
64
63
  innerPane.append(content)
@@ -81,6 +80,13 @@ function Pane(options){
81
80
  view.hide()
82
81
  $(context).trigger('hidden')
83
82
  }
83
+ function toggle(){
84
+ if (isOpen) {
85
+ context.hide()
86
+ } else {
87
+ context.show()
88
+ }
89
+ }
84
90
 
85
91
  // returns true if the event originated outside the pane
86
92
  function isEventOutsidePane(event){
@@ -7,6 +7,7 @@ var UberSearch = function(data, options){
7
7
  }
8
8
 
9
9
  options = $.extend({
10
+ ariaLabel: null,
10
11
  value: null, // Initialize with this selectedValue
11
12
  disabled: false, // Initialize with this disabled value
12
13
  search: true, // Show the search input
@@ -30,14 +31,22 @@ var UberSearch = function(data, options){
30
31
  }, options)
31
32
 
32
33
  var context = this
33
- var view = $('<span class="uber_select"></span>')
34
+ var view = $('<span class="uber_select" role="listbox"></span>')
34
35
  var selectedValue = options.value // Internally selected value
35
36
  var outputContainer = options.outputContainer || new OutputContainer({selectCaret: options.selectCaret})
36
- var searchField = new SearchField({placeholder: options.searchPlaceholder, clearButton: options.clearSearchButton})
37
37
  var resultsContainer = $('<div class="results_container"></div>')
38
38
  var messages = $('<div class="messages"></div>')
39
- var pane = new Pane({trigger: outputContainer.view})
40
- var search = new Search(searchField.input, resultsContainer, {
39
+ var pane = new Pane()
40
+
41
+ if (options.ariaLabel) { view.attr("aria-label", options.ariaLabel) }
42
+
43
+ var searchField = new SearchField({
44
+ placeholder: options.searchPlaceholder,
45
+ clearButton: options.clearSearchButton,
46
+ searchInputAttributes: options.searchInputAttributes
47
+ })
48
+
49
+ var search = new Search(searchField.input, resultsContainer, {
41
50
  model: {
42
51
  dataForMatching: dataForMatching,
43
52
  minQueryLength: options.minQueryLength,
@@ -48,23 +57,56 @@ var UberSearch = function(data, options){
48
57
  view: {
49
58
  renderResults: renderResults,
50
59
  buildResult: options.buildResult || buildResult,
51
- keypressInput: searchField.input
60
+ keypressInput: options.search ? searchField.input : null
52
61
  }
53
62
  })
54
63
 
55
64
 
56
65
  // BEHAVIOUR
57
66
 
67
+ // Show the pane when the select element is clicked
68
+ $(outputContainer.view).on('click', function(event){
69
+ if (outputContainer.view.hasClass('disabled')) { return }
70
+
71
+ pane.show()
72
+ })
73
+
74
+ // Show the pane if the user was tabbed onto the trigger and pressed enter, space, or down arrow
75
+ $(outputContainer.view).on('keyup', function(event){
76
+ if (outputContainer.view.hasClass('disabled')) { return }
77
+
78
+ if (event.which === 32 || event.which === 40 && pane.isClosed()){
79
+ pane.show()
80
+ return false
81
+ }
82
+ else if (event.which === 13){ // toggle pane when enter is pressed
83
+ pane.toggle()
84
+ return false
85
+ }
86
+ })
87
+
58
88
  // When the pane is opened
59
89
  $(pane).on('shown', function(){
60
90
  search.clear()
61
- markSelected()
62
- $(searchField.input).focus()
91
+ markSelected()
63
92
  view.addClass('open')
93
+
94
+ if (options.search) {
95
+ $(searchField.input).focus()
96
+ } else {
97
+ pane.view.find("ul.results li:first").focus()
98
+ }
64
99
 
65
100
  triggerEvent(eventsTriggered.shown)
66
101
  })
67
102
 
103
+
104
+ // When the pane is hidden
105
+ $(pane).on('hidden', function(){
106
+ view.removeClass('open')
107
+ view.focus()
108
+ })
109
+
68
110
  // When the query is changed
69
111
  $(search).on('queryChanged', function(){
70
112
  updateMessages()
@@ -96,6 +138,8 @@ var UberSearch = function(data, options){
96
138
  return
97
139
  }
98
140
 
141
+ event.stopPropagation();
142
+
99
143
  setValue(valueFromResult(this))
100
144
  pane.hide()
101
145
  triggerEvent(eventsTriggered.select, [datum, this, event])
@@ -106,20 +150,13 @@ var UberSearch = function(data, options){
106
150
  options.onNoHighlightSubmit($(this).val())
107
151
  })
108
152
 
109
- // When the pane is hidden
110
- $(pane).on('hidden', function(){
111
- view.removeClass('open')
112
- })
113
-
114
153
 
115
154
  // INITIALIZATION
116
155
 
117
156
  setDisabled(options.disabled)
118
157
  setData(data)
119
158
 
120
- if (options.search){
121
- pane.addContent('search', searchField.view)
122
- }
159
+ if (options.search) { pane.addContent('search', searchField.view) }
123
160
  pane.addContent('messages', messages)
124
161
  pane.addContent('results', resultsContainer)
125
162
 
@@ -239,7 +276,7 @@ var UberSearch = function(data, options){
239
276
  }
240
277
 
241
278
  function buildResult(datum){
242
- var result = $('<li class="result"></li>')
279
+ var result = $('<li class="result" tabindex="0"></li>')
243
280
  .html((options.treatBlankOptionAsPlaceholder ? datum.text || options.placeholder : datum.text) || "&nbsp;")
244
281
  .data(datum) // Store the datum so we can get know what the value of the selected item is
245
282
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  <span class="example">
20
20
  <label for="select">
21
- search and placeholder
21
+ Search and placeholder
22
22
  </label>
23
23
  <select placeholder="Choose a gender">
24
24
  <option></option>
@@ -31,6 +31,17 @@
31
31
  </p>
32
32
  </span>
33
33
 
34
+ <span class="example">
35
+ <label for="select">
36
+ Search input attributes
37
+ </label>
38
+ <select data-uber-options='{"searchInputAttributes": {"aria-label": "This is a test"}}'>
39
+ <option></option>
40
+ <option>male</option>
41
+ <option>female</option>
42
+ </select>
43
+ <p>This example includes an aria label attribute for the search input element.</p>
44
+ </span>
34
45
 
35
46
  <span class="example">
36
47
  <label for="select">
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uber_select_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Jakobsen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-25 00:00:00.000000000 Z
11
+ date: 2022-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
- description:
55
+ description:
56
56
  email:
57
57
  - nicholas.jakobsen@gmail.com
58
58
  executables: []
@@ -84,7 +84,7 @@ files:
84
84
  homepage: https://github.com/culturecode/uber_select_rails
85
85
  licenses: []
86
86
  metadata: {}
87
- post_install_message:
87
+ post_install_message:
88
88
  rdoc_options: []
89
89
  require_paths:
90
90
  - lib
@@ -99,8 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
101
  requirements: []
102
- rubygems_version: 3.0.8
103
- signing_key:
102
+ rubygems_version: 3.2.3
103
+ signing_key:
104
104
  specification_version: 4
105
105
  summary: A Rails gem containing a javascript plugin that adds a layer of UI goodness
106
106
  overtop of basic HTML select elements