activeadmin-rb 1.4.0 → 1.5.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +17 -12
- data/CHANGELOG.md +10 -1
- data/Gemfile +3 -11
- data/activeadmin-rb.gemspec +3 -2
- data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
- data/app/views/active_admin/devise/registrations/new.html.erb +1 -1
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/docs/documentation.md +1 -1
- data/features/index/filters.feature +3 -3
- data/features/index/pagination.feature +3 -3
- data/features/registering_assets.feature +4 -8
- data/features/support/env.rb +4 -0
- data/gemfiles/rails_42.gemfile +2 -1
- data/gemfiles/rails_50.gemfile +2 -1
- data/gemfiles/rails_51.gemfile +2 -1
- data/gemfiles/rails_52.gemfile +2 -1
- data/gemfiles/rails_60.gemfile +13 -0
- data/lib/active_admin.rb +1 -0
- data/lib/active_admin/application.rb +4 -3
- data/lib/active_admin/asset_registration.rb +0 -8
- data/lib/active_admin/version.rb +1 -1
- data/lib/bug_report_templates/active_admin_master.rb +3 -4
- data/spec/bug_report_templates_spec.rb +6 -4
- data/spec/support/active_admin_integration_spec_helper.rb +15 -7
- data/spec/support/rails_template.rb +8 -6
- data/spec/unit/asset_registration_spec.rb +0 -29
- data/spec/unit/auto_link_spec.rb +26 -16
- data/spec/unit/comments_spec.rb +22 -7
- data/spec/unit/filters/filter_form_builder_spec.rb +10 -10
- data/spec/unit/form_builder_spec.rb +1 -1
- data/spec/unit/pretty_format_spec.rb +73 -22
- data/spec/unit/resource_controller/data_access_spec.rb +3 -3
- data/spec/unit/routing_spec.rb +1 -1
- data/spec/unit/view_helpers/flash_helper_spec.rb +1 -1
- data/spec/unit/view_helpers/form_helper_spec.rb +2 -2
- data/spec/unit/views/components/attributes_table_spec.rb +1 -1
- metadata +20 -36
- data/vendor/assets/javascripts/jquery-ui/data.js +0 -41
- data/vendor/assets/javascripts/jquery-ui/disable-selection.js +0 -48
- data/vendor/assets/javascripts/jquery-ui/escape-selector.js +0 -23
- data/vendor/assets/javascripts/jquery-ui/focusable.js +0 -86
- data/vendor/assets/javascripts/jquery-ui/ie.js +0 -17
- data/vendor/assets/javascripts/jquery-ui/keycode.js +0 -47
- data/vendor/assets/javascripts/jquery-ui/plugin.js +0 -46
- data/vendor/assets/javascripts/jquery-ui/position.js +0 -500
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +0 -42
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +0 -23
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +0 -47
- data/vendor/assets/javascripts/jquery-ui/tabbable.js +0 -38
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +0 -51
- data/vendor/assets/javascripts/jquery-ui/version.js +0 -17
- data/vendor/assets/javascripts/jquery-ui/widget.js +0 -735
- data/vendor/assets/javascripts/jquery-ui/widgets/button.js +0 -391
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +0 -300
- data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +0 -300
- data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +0 -2123
- data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +0 -954
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +0 -1259
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +0 -230
- data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +0 -1207
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +0 -1561
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +0 -931
@@ -1,391 +0,0 @@
|
|
1
|
-
//= require jquery-ui/widgets/controlgroup
|
2
|
-
//= require jquery-ui/widgets/checkboxradio
|
3
|
-
//= require jquery-ui/keycode
|
4
|
-
//= require jquery-ui/widget
|
5
|
-
|
6
|
-
/*!
|
7
|
-
* jQuery UI Button 1.12.1
|
8
|
-
* http://jqueryui.com
|
9
|
-
*
|
10
|
-
* Copyright jQuery Foundation and other contributors
|
11
|
-
* Released under the MIT license.
|
12
|
-
* http://jquery.org/license
|
13
|
-
*/
|
14
|
-
|
15
|
-
//>>label: Button
|
16
|
-
//>>group: Widgets
|
17
|
-
//>>description: Enhances a form with themeable buttons.
|
18
|
-
//>>docs: http://api.jqueryui.com/button/
|
19
|
-
//>>demos: http://jqueryui.com/button/
|
20
|
-
//>>css.structure: ../../themes/base/core.css
|
21
|
-
//>>css.structure: ../../themes/base/button.css
|
22
|
-
//>>css.theme: ../../themes/base/theme.css
|
23
|
-
|
24
|
-
( function( factory ) {
|
25
|
-
if ( typeof define === "function" && define.amd ) {
|
26
|
-
|
27
|
-
// AMD. Register as an anonymous module.
|
28
|
-
define( [
|
29
|
-
"jquery",
|
30
|
-
|
31
|
-
// These are only for backcompat
|
32
|
-
// TODO: Remove after 1.12
|
33
|
-
"./controlgroup",
|
34
|
-
"./checkboxradio",
|
35
|
-
|
36
|
-
"../keycode",
|
37
|
-
"../widget"
|
38
|
-
], factory );
|
39
|
-
} else {
|
40
|
-
|
41
|
-
// Browser globals
|
42
|
-
factory( jQuery );
|
43
|
-
}
|
44
|
-
}( function( $ ) {
|
45
|
-
|
46
|
-
$.widget( "ui.button", {
|
47
|
-
version: "1.12.1",
|
48
|
-
defaultElement: "<button>",
|
49
|
-
options: {
|
50
|
-
classes: {
|
51
|
-
"ui-button": "ui-corner-all"
|
52
|
-
},
|
53
|
-
disabled: null,
|
54
|
-
icon: null,
|
55
|
-
iconPosition: "beginning",
|
56
|
-
label: null,
|
57
|
-
showLabel: true
|
58
|
-
},
|
59
|
-
|
60
|
-
_getCreateOptions: function() {
|
61
|
-
var disabled,
|
62
|
-
|
63
|
-
// This is to support cases like in jQuery Mobile where the base widget does have
|
64
|
-
// an implementation of _getCreateOptions
|
65
|
-
options = this._super() || {};
|
66
|
-
|
67
|
-
this.isInput = this.element.is( "input" );
|
68
|
-
|
69
|
-
disabled = this.element[ 0 ].disabled;
|
70
|
-
if ( disabled != null ) {
|
71
|
-
options.disabled = disabled;
|
72
|
-
}
|
73
|
-
|
74
|
-
this.originalLabel = this.isInput ? this.element.val() : this.element.html();
|
75
|
-
if ( this.originalLabel ) {
|
76
|
-
options.label = this.originalLabel;
|
77
|
-
}
|
78
|
-
|
79
|
-
return options;
|
80
|
-
},
|
81
|
-
|
82
|
-
_create: function() {
|
83
|
-
if ( !this.option.showLabel & !this.options.icon ) {
|
84
|
-
this.options.showLabel = true;
|
85
|
-
}
|
86
|
-
|
87
|
-
// We have to check the option again here even though we did in _getCreateOptions,
|
88
|
-
// because null may have been passed on init which would override what was set in
|
89
|
-
// _getCreateOptions
|
90
|
-
if ( this.options.disabled == null ) {
|
91
|
-
this.options.disabled = this.element[ 0 ].disabled || false;
|
92
|
-
}
|
93
|
-
|
94
|
-
this.hasTitle = !!this.element.attr( "title" );
|
95
|
-
|
96
|
-
// Check to see if the label needs to be set or if its already correct
|
97
|
-
if ( this.options.label && this.options.label !== this.originalLabel ) {
|
98
|
-
if ( this.isInput ) {
|
99
|
-
this.element.val( this.options.label );
|
100
|
-
} else {
|
101
|
-
this.element.html( this.options.label );
|
102
|
-
}
|
103
|
-
}
|
104
|
-
this._addClass( "ui-button", "ui-widget" );
|
105
|
-
this._setOption( "disabled", this.options.disabled );
|
106
|
-
this._enhance();
|
107
|
-
|
108
|
-
if ( this.element.is( "a" ) ) {
|
109
|
-
this._on( {
|
110
|
-
"keyup": function( event ) {
|
111
|
-
if ( event.keyCode === $.ui.keyCode.SPACE ) {
|
112
|
-
event.preventDefault();
|
113
|
-
|
114
|
-
// Support: PhantomJS <= 1.9, IE 8 Only
|
115
|
-
// If a native click is available use it so we actually cause navigation
|
116
|
-
// otherwise just trigger a click event
|
117
|
-
if ( this.element[ 0 ].click ) {
|
118
|
-
this.element[ 0 ].click();
|
119
|
-
} else {
|
120
|
-
this.element.trigger( "click" );
|
121
|
-
}
|
122
|
-
}
|
123
|
-
}
|
124
|
-
} );
|
125
|
-
}
|
126
|
-
},
|
127
|
-
|
128
|
-
_enhance: function() {
|
129
|
-
if ( !this.element.is( "button" ) ) {
|
130
|
-
this.element.attr( "role", "button" );
|
131
|
-
}
|
132
|
-
|
133
|
-
if ( this.options.icon ) {
|
134
|
-
this._updateIcon( "icon", this.options.icon );
|
135
|
-
this._updateTooltip();
|
136
|
-
}
|
137
|
-
},
|
138
|
-
|
139
|
-
_updateTooltip: function() {
|
140
|
-
this.title = this.element.attr( "title" );
|
141
|
-
|
142
|
-
if ( !this.options.showLabel && !this.title ) {
|
143
|
-
this.element.attr( "title", this.options.label );
|
144
|
-
}
|
145
|
-
},
|
146
|
-
|
147
|
-
_updateIcon: function( option, value ) {
|
148
|
-
var icon = option !== "iconPosition",
|
149
|
-
position = icon ? this.options.iconPosition : value,
|
150
|
-
displayBlock = position === "top" || position === "bottom";
|
151
|
-
|
152
|
-
// Create icon
|
153
|
-
if ( !this.icon ) {
|
154
|
-
this.icon = $( "<span>" );
|
155
|
-
|
156
|
-
this._addClass( this.icon, "ui-button-icon", "ui-icon" );
|
157
|
-
|
158
|
-
if ( !this.options.showLabel ) {
|
159
|
-
this._addClass( "ui-button-icon-only" );
|
160
|
-
}
|
161
|
-
} else if ( icon ) {
|
162
|
-
|
163
|
-
// If we are updating the icon remove the old icon class
|
164
|
-
this._removeClass( this.icon, null, this.options.icon );
|
165
|
-
}
|
166
|
-
|
167
|
-
// If we are updating the icon add the new icon class
|
168
|
-
if ( icon ) {
|
169
|
-
this._addClass( this.icon, null, value );
|
170
|
-
}
|
171
|
-
|
172
|
-
this._attachIcon( position );
|
173
|
-
|
174
|
-
// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove
|
175
|
-
// the iconSpace if there is one.
|
176
|
-
if ( displayBlock ) {
|
177
|
-
this._addClass( this.icon, null, "ui-widget-icon-block" );
|
178
|
-
if ( this.iconSpace ) {
|
179
|
-
this.iconSpace.remove();
|
180
|
-
}
|
181
|
-
} else {
|
182
|
-
|
183
|
-
// Position is beginning or end so remove the ui-widget-icon-block class and add the
|
184
|
-
// space if it does not exist
|
185
|
-
if ( !this.iconSpace ) {
|
186
|
-
this.iconSpace = $( "<span> </span>" );
|
187
|
-
this._addClass( this.iconSpace, "ui-button-icon-space" );
|
188
|
-
}
|
189
|
-
this._removeClass( this.icon, null, "ui-wiget-icon-block" );
|
190
|
-
this._attachIconSpace( position );
|
191
|
-
}
|
192
|
-
},
|
193
|
-
|
194
|
-
_destroy: function() {
|
195
|
-
this.element.removeAttr( "role" );
|
196
|
-
|
197
|
-
if ( this.icon ) {
|
198
|
-
this.icon.remove();
|
199
|
-
}
|
200
|
-
if ( this.iconSpace ) {
|
201
|
-
this.iconSpace.remove();
|
202
|
-
}
|
203
|
-
if ( !this.hasTitle ) {
|
204
|
-
this.element.removeAttr( "title" );
|
205
|
-
}
|
206
|
-
},
|
207
|
-
|
208
|
-
_attachIconSpace: function( iconPosition ) {
|
209
|
-
this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace );
|
210
|
-
},
|
211
|
-
|
212
|
-
_attachIcon: function( iconPosition ) {
|
213
|
-
this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon );
|
214
|
-
},
|
215
|
-
|
216
|
-
_setOptions: function( options ) {
|
217
|
-
var newShowLabel = options.showLabel === undefined ?
|
218
|
-
this.options.showLabel :
|
219
|
-
options.showLabel,
|
220
|
-
newIcon = options.icon === undefined ? this.options.icon : options.icon;
|
221
|
-
|
222
|
-
if ( !newShowLabel && !newIcon ) {
|
223
|
-
options.showLabel = true;
|
224
|
-
}
|
225
|
-
this._super( options );
|
226
|
-
},
|
227
|
-
|
228
|
-
_setOption: function( key, value ) {
|
229
|
-
if ( key === "icon" ) {
|
230
|
-
if ( value ) {
|
231
|
-
this._updateIcon( key, value );
|
232
|
-
} else if ( this.icon ) {
|
233
|
-
this.icon.remove();
|
234
|
-
if ( this.iconSpace ) {
|
235
|
-
this.iconSpace.remove();
|
236
|
-
}
|
237
|
-
}
|
238
|
-
}
|
239
|
-
|
240
|
-
if ( key === "iconPosition" ) {
|
241
|
-
this._updateIcon( key, value );
|
242
|
-
}
|
243
|
-
|
244
|
-
// Make sure we can't end up with a button that has neither text nor icon
|
245
|
-
if ( key === "showLabel" ) {
|
246
|
-
this._toggleClass( "ui-button-icon-only", null, !value );
|
247
|
-
this._updateTooltip();
|
248
|
-
}
|
249
|
-
|
250
|
-
if ( key === "label" ) {
|
251
|
-
if ( this.isInput ) {
|
252
|
-
this.element.val( value );
|
253
|
-
} else {
|
254
|
-
|
255
|
-
// If there is an icon, append it, else nothing then append the value
|
256
|
-
// this avoids removal of the icon when setting label text
|
257
|
-
this.element.html( value );
|
258
|
-
if ( this.icon ) {
|
259
|
-
this._attachIcon( this.options.iconPosition );
|
260
|
-
this._attachIconSpace( this.options.iconPosition );
|
261
|
-
}
|
262
|
-
}
|
263
|
-
}
|
264
|
-
|
265
|
-
this._super( key, value );
|
266
|
-
|
267
|
-
if ( key === "disabled" ) {
|
268
|
-
this._toggleClass( null, "ui-state-disabled", value );
|
269
|
-
this.element[ 0 ].disabled = value;
|
270
|
-
if ( value ) {
|
271
|
-
this.element.blur();
|
272
|
-
}
|
273
|
-
}
|
274
|
-
},
|
275
|
-
|
276
|
-
refresh: function() {
|
277
|
-
|
278
|
-
// Make sure to only check disabled if its an element that supports this otherwise
|
279
|
-
// check for the disabled class to determine state
|
280
|
-
var isDisabled = this.element.is( "input, button" ) ?
|
281
|
-
this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" );
|
282
|
-
|
283
|
-
if ( isDisabled !== this.options.disabled ) {
|
284
|
-
this._setOptions( { disabled: isDisabled } );
|
285
|
-
}
|
286
|
-
|
287
|
-
this._updateTooltip();
|
288
|
-
}
|
289
|
-
} );
|
290
|
-
|
291
|
-
// DEPRECATED
|
292
|
-
if ( $.uiBackCompat !== false ) {
|
293
|
-
|
294
|
-
// Text and Icons options
|
295
|
-
$.widget( "ui.button", $.ui.button, {
|
296
|
-
options: {
|
297
|
-
text: true,
|
298
|
-
icons: {
|
299
|
-
primary: null,
|
300
|
-
secondary: null
|
301
|
-
}
|
302
|
-
},
|
303
|
-
|
304
|
-
_create: function() {
|
305
|
-
if ( this.options.showLabel && !this.options.text ) {
|
306
|
-
this.options.showLabel = this.options.text;
|
307
|
-
}
|
308
|
-
if ( !this.options.showLabel && this.options.text ) {
|
309
|
-
this.options.text = this.options.showLabel;
|
310
|
-
}
|
311
|
-
if ( !this.options.icon && ( this.options.icons.primary ||
|
312
|
-
this.options.icons.secondary ) ) {
|
313
|
-
if ( this.options.icons.primary ) {
|
314
|
-
this.options.icon = this.options.icons.primary;
|
315
|
-
} else {
|
316
|
-
this.options.icon = this.options.icons.secondary;
|
317
|
-
this.options.iconPosition = "end";
|
318
|
-
}
|
319
|
-
} else if ( this.options.icon ) {
|
320
|
-
this.options.icons.primary = this.options.icon;
|
321
|
-
}
|
322
|
-
this._super();
|
323
|
-
},
|
324
|
-
|
325
|
-
_setOption: function( key, value ) {
|
326
|
-
if ( key === "text" ) {
|
327
|
-
this._super( "showLabel", value );
|
328
|
-
return;
|
329
|
-
}
|
330
|
-
if ( key === "showLabel" ) {
|
331
|
-
this.options.text = value;
|
332
|
-
}
|
333
|
-
if ( key === "icon" ) {
|
334
|
-
this.options.icons.primary = value;
|
335
|
-
}
|
336
|
-
if ( key === "icons" ) {
|
337
|
-
if ( value.primary ) {
|
338
|
-
this._super( "icon", value.primary );
|
339
|
-
this._super( "iconPosition", "beginning" );
|
340
|
-
} else if ( value.secondary ) {
|
341
|
-
this._super( "icon", value.secondary );
|
342
|
-
this._super( "iconPosition", "end" );
|
343
|
-
}
|
344
|
-
}
|
345
|
-
this._superApply( arguments );
|
346
|
-
}
|
347
|
-
} );
|
348
|
-
|
349
|
-
$.fn.button = ( function( orig ) {
|
350
|
-
return function() {
|
351
|
-
if ( !this.length || ( this.length && this[ 0 ].tagName !== "INPUT" ) ||
|
352
|
-
( this.length && this[ 0 ].tagName === "INPUT" && (
|
353
|
-
this.attr( "type" ) !== "checkbox" && this.attr( "type" ) !== "radio"
|
354
|
-
) ) ) {
|
355
|
-
return orig.apply( this, arguments );
|
356
|
-
}
|
357
|
-
if ( !$.ui.checkboxradio ) {
|
358
|
-
$.error( "Checkboxradio widget missing" );
|
359
|
-
}
|
360
|
-
if ( arguments.length === 0 ) {
|
361
|
-
return this.checkboxradio( {
|
362
|
-
"icon": false
|
363
|
-
} );
|
364
|
-
}
|
365
|
-
return this.checkboxradio.apply( this, arguments );
|
366
|
-
};
|
367
|
-
} )( $.fn.button );
|
368
|
-
|
369
|
-
$.fn.buttonset = function() {
|
370
|
-
if ( !$.ui.controlgroup ) {
|
371
|
-
$.error( "Controlgroup widget missing" );
|
372
|
-
}
|
373
|
-
if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) {
|
374
|
-
return this.controlgroup.apply( this,
|
375
|
-
[ arguments[ 0 ], "items.button", arguments[ 2 ] ] );
|
376
|
-
}
|
377
|
-
if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) {
|
378
|
-
return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] );
|
379
|
-
}
|
380
|
-
if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) {
|
381
|
-
arguments[ 0 ].items = {
|
382
|
-
button: arguments[ 0 ].items
|
383
|
-
};
|
384
|
-
}
|
385
|
-
return this.controlgroup.apply( this, arguments );
|
386
|
-
};
|
387
|
-
}
|
388
|
-
|
389
|
-
return $.ui.button;
|
390
|
-
|
391
|
-
} ) );
|
@@ -1,300 +0,0 @@
|
|
1
|
-
//= require jquery-ui/widget
|
2
|
-
|
3
|
-
/*!
|
4
|
-
* jQuery UI Controlgroup 1.12.1
|
5
|
-
* http://jqueryui.com
|
6
|
-
*
|
7
|
-
* Copyright jQuery Foundation and other contributors
|
8
|
-
* Released under the MIT license.
|
9
|
-
* http://jquery.org/license
|
10
|
-
*/
|
11
|
-
|
12
|
-
//>>label: Controlgroup
|
13
|
-
//>>group: Widgets
|
14
|
-
//>>description: Visually groups form control widgets
|
15
|
-
//>>docs: http://api.jqueryui.com/controlgroup/
|
16
|
-
//>>demos: http://jqueryui.com/controlgroup/
|
17
|
-
//>>css.structure: ../../themes/base/core.css
|
18
|
-
//>>css.structure: ../../themes/base/controlgroup.css
|
19
|
-
//>>css.theme: ../../themes/base/theme.css
|
20
|
-
|
21
|
-
( function( factory ) {
|
22
|
-
if ( typeof define === "function" && define.amd ) {
|
23
|
-
|
24
|
-
// AMD. Register as an anonymous module.
|
25
|
-
define( [
|
26
|
-
"jquery",
|
27
|
-
"../widget"
|
28
|
-
], factory );
|
29
|
-
} else {
|
30
|
-
|
31
|
-
// Browser globals
|
32
|
-
factory( jQuery );
|
33
|
-
}
|
34
|
-
}( function( $ ) {
|
35
|
-
var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;
|
36
|
-
|
37
|
-
return $.widget( "ui.controlgroup", {
|
38
|
-
version: "1.12.1",
|
39
|
-
defaultElement: "<div>",
|
40
|
-
options: {
|
41
|
-
direction: "horizontal",
|
42
|
-
disabled: null,
|
43
|
-
onlyVisible: true,
|
44
|
-
items: {
|
45
|
-
"button": "input[type=button], input[type=submit], input[type=reset], button, a",
|
46
|
-
"controlgroupLabel": ".ui-controlgroup-label",
|
47
|
-
"checkboxradio": "input[type='checkbox'], input[type='radio']",
|
48
|
-
"selectmenu": "select",
|
49
|
-
"spinner": ".ui-spinner-input"
|
50
|
-
}
|
51
|
-
},
|
52
|
-
|
53
|
-
_create: function() {
|
54
|
-
this._enhance();
|
55
|
-
},
|
56
|
-
|
57
|
-
// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation
|
58
|
-
_enhance: function() {
|
59
|
-
this.element.attr( "role", "toolbar" );
|
60
|
-
this.refresh();
|
61
|
-
},
|
62
|
-
|
63
|
-
_destroy: function() {
|
64
|
-
this._callChildMethod( "destroy" );
|
65
|
-
this.childWidgets.removeData( "ui-controlgroup-data" );
|
66
|
-
this.element.removeAttr( "role" );
|
67
|
-
if ( this.options.items.controlgroupLabel ) {
|
68
|
-
this.element
|
69
|
-
.find( this.options.items.controlgroupLabel )
|
70
|
-
.find( ".ui-controlgroup-label-contents" )
|
71
|
-
.contents().unwrap();
|
72
|
-
}
|
73
|
-
},
|
74
|
-
|
75
|
-
_initWidgets: function() {
|
76
|
-
var that = this,
|
77
|
-
childWidgets = [];
|
78
|
-
|
79
|
-
// First we iterate over each of the items options
|
80
|
-
$.each( this.options.items, function( widget, selector ) {
|
81
|
-
var labels;
|
82
|
-
var options = {};
|
83
|
-
|
84
|
-
// Make sure the widget has a selector set
|
85
|
-
if ( !selector ) {
|
86
|
-
return;
|
87
|
-
}
|
88
|
-
|
89
|
-
if ( widget === "controlgroupLabel" ) {
|
90
|
-
labels = that.element.find( selector );
|
91
|
-
labels.each( function() {
|
92
|
-
var element = $( this );
|
93
|
-
|
94
|
-
if ( element.children( ".ui-controlgroup-label-contents" ).length ) {
|
95
|
-
return;
|
96
|
-
}
|
97
|
-
element.contents()
|
98
|
-
.wrapAll( "<span class='ui-controlgroup-label-contents'></span>" );
|
99
|
-
} );
|
100
|
-
that._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" );
|
101
|
-
childWidgets = childWidgets.concat( labels.get() );
|
102
|
-
return;
|
103
|
-
}
|
104
|
-
|
105
|
-
// Make sure the widget actually exists
|
106
|
-
if ( !$.fn[ widget ] ) {
|
107
|
-
return;
|
108
|
-
}
|
109
|
-
|
110
|
-
// We assume everything is in the middle to start because we can't determine
|
111
|
-
// first / last elements until all enhancments are done.
|
112
|
-
if ( that[ "_" + widget + "Options" ] ) {
|
113
|
-
options = that[ "_" + widget + "Options" ]( "middle" );
|
114
|
-
} else {
|
115
|
-
options = { classes: {} };
|
116
|
-
}
|
117
|
-
|
118
|
-
// Find instances of this widget inside controlgroup and init them
|
119
|
-
that.element
|
120
|
-
.find( selector )
|
121
|
-
.each( function() {
|
122
|
-
var element = $( this );
|
123
|
-
var instance = element[ widget ]( "instance" );
|
124
|
-
|
125
|
-
// We need to clone the default options for this type of widget to avoid
|
126
|
-
// polluting the variable options which has a wider scope than a single widget.
|
127
|
-
var instanceOptions = $.widget.extend( {}, options );
|
128
|
-
|
129
|
-
// If the button is the child of a spinner ignore it
|
130
|
-
// TODO: Find a more generic solution
|
131
|
-
if ( widget === "button" && element.parent( ".ui-spinner" ).length ) {
|
132
|
-
return;
|
133
|
-
}
|
134
|
-
|
135
|
-
// Create the widget if it doesn't exist
|
136
|
-
if ( !instance ) {
|
137
|
-
instance = element[ widget ]()[ widget ]( "instance" );
|
138
|
-
}
|
139
|
-
if ( instance ) {
|
140
|
-
instanceOptions.classes =
|
141
|
-
that._resolveClassesValues( instanceOptions.classes, instance );
|
142
|
-
}
|
143
|
-
element[ widget ]( instanceOptions );
|
144
|
-
|
145
|
-
// Store an instance of the controlgroup to be able to reference
|
146
|
-
// from the outermost element for changing options and refresh
|
147
|
-
var widgetElement = element[ widget ]( "widget" );
|
148
|
-
$.data( widgetElement[ 0 ], "ui-controlgroup-data",
|
149
|
-
instance ? instance : element[ widget ]( "instance" ) );
|
150
|
-
|
151
|
-
childWidgets.push( widgetElement[ 0 ] );
|
152
|
-
} );
|
153
|
-
} );
|
154
|
-
|
155
|
-
this.childWidgets = $( $.unique( childWidgets ) );
|
156
|
-
this._addClass( this.childWidgets, "ui-controlgroup-item" );
|
157
|
-
},
|
158
|
-
|
159
|
-
_callChildMethod: function( method ) {
|
160
|
-
this.childWidgets.each( function() {
|
161
|
-
var element = $( this ),
|
162
|
-
data = element.data( "ui-controlgroup-data" );
|
163
|
-
if ( data && data[ method ] ) {
|
164
|
-
data[ method ]();
|
165
|
-
}
|
166
|
-
} );
|
167
|
-
},
|
168
|
-
|
169
|
-
_updateCornerClass: function( element, position ) {
|
170
|
-
var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all";
|
171
|
-
var add = this._buildSimpleOptions( position, "label" ).classes.label;
|
172
|
-
|
173
|
-
this._removeClass( element, null, remove );
|
174
|
-
this._addClass( element, null, add );
|
175
|
-
},
|
176
|
-
|
177
|
-
_buildSimpleOptions: function( position, key ) {
|
178
|
-
var direction = this.options.direction === "vertical";
|
179
|
-
var result = {
|
180
|
-
classes: {}
|
181
|
-
};
|
182
|
-
result.classes[ key ] = {
|
183
|
-
"middle": "",
|
184
|
-
"first": "ui-corner-" + ( direction ? "top" : "left" ),
|
185
|
-
"last": "ui-corner-" + ( direction ? "bottom" : "right" ),
|
186
|
-
"only": "ui-corner-all"
|
187
|
-
}[ position ];
|
188
|
-
|
189
|
-
return result;
|
190
|
-
},
|
191
|
-
|
192
|
-
_spinnerOptions: function( position ) {
|
193
|
-
var options = this._buildSimpleOptions( position, "ui-spinner" );
|
194
|
-
|
195
|
-
options.classes[ "ui-spinner-up" ] = "";
|
196
|
-
options.classes[ "ui-spinner-down" ] = "";
|
197
|
-
|
198
|
-
return options;
|
199
|
-
},
|
200
|
-
|
201
|
-
_buttonOptions: function( position ) {
|
202
|
-
return this._buildSimpleOptions( position, "ui-button" );
|
203
|
-
},
|
204
|
-
|
205
|
-
_checkboxradioOptions: function( position ) {
|
206
|
-
return this._buildSimpleOptions( position, "ui-checkboxradio-label" );
|
207
|
-
},
|
208
|
-
|
209
|
-
_selectmenuOptions: function( position ) {
|
210
|
-
var direction = this.options.direction === "vertical";
|
211
|
-
return {
|
212
|
-
width: direction ? "auto" : false,
|
213
|
-
classes: {
|
214
|
-
middle: {
|
215
|
-
"ui-selectmenu-button-open": "",
|
216
|
-
"ui-selectmenu-button-closed": ""
|
217
|
-
},
|
218
|
-
first: {
|
219
|
-
"ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ),
|
220
|
-
"ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" )
|
221
|
-
},
|
222
|
-
last: {
|
223
|
-
"ui-selectmenu-button-open": direction ? "" : "ui-corner-tr",
|
224
|
-
"ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" )
|
225
|
-
},
|
226
|
-
only: {
|
227
|
-
"ui-selectmenu-button-open": "ui-corner-top",
|
228
|
-
"ui-selectmenu-button-closed": "ui-corner-all"
|
229
|
-
}
|
230
|
-
|
231
|
-
}[ position ]
|
232
|
-
};
|
233
|
-
},
|
234
|
-
|
235
|
-
_resolveClassesValues: function( classes, instance ) {
|
236
|
-
var result = {};
|
237
|
-
$.each( classes, function( key ) {
|
238
|
-
var current = instance.options.classes[ key ] || "";
|
239
|
-
current = $.trim( current.replace( controlgroupCornerRegex, "" ) );
|
240
|
-
result[ key ] = ( current + " " + classes[ key ] ).replace( /\s+/g, " " );
|
241
|
-
} );
|
242
|
-
return result;
|
243
|
-
},
|
244
|
-
|
245
|
-
_setOption: function( key, value ) {
|
246
|
-
if ( key === "direction" ) {
|
247
|
-
this._removeClass( "ui-controlgroup-" + this.options.direction );
|
248
|
-
}
|
249
|
-
|
250
|
-
this._super( key, value );
|
251
|
-
if ( key === "disabled" ) {
|
252
|
-
this._callChildMethod( value ? "disable" : "enable" );
|
253
|
-
return;
|
254
|
-
}
|
255
|
-
|
256
|
-
this.refresh();
|
257
|
-
},
|
258
|
-
|
259
|
-
refresh: function() {
|
260
|
-
var children,
|
261
|
-
that = this;
|
262
|
-
|
263
|
-
this._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction );
|
264
|
-
|
265
|
-
if ( this.options.direction === "horizontal" ) {
|
266
|
-
this._addClass( null, "ui-helper-clearfix" );
|
267
|
-
}
|
268
|
-
this._initWidgets();
|
269
|
-
|
270
|
-
children = this.childWidgets;
|
271
|
-
|
272
|
-
// We filter here because we need to track all childWidgets not just the visible ones
|
273
|
-
if ( this.options.onlyVisible ) {
|
274
|
-
children = children.filter( ":visible" );
|
275
|
-
}
|
276
|
-
|
277
|
-
if ( children.length ) {
|
278
|
-
|
279
|
-
// We do this last because we need to make sure all enhancment is done
|
280
|
-
// before determining first and last
|
281
|
-
$.each( [ "first", "last" ], function( index, value ) {
|
282
|
-
var instance = children[ value ]().data( "ui-controlgroup-data" );
|
283
|
-
|
284
|
-
if ( instance && that[ "_" + instance.widgetName + "Options" ] ) {
|
285
|
-
var options = that[ "_" + instance.widgetName + "Options" ](
|
286
|
-
children.length === 1 ? "only" : value
|
287
|
-
);
|
288
|
-
options.classes = that._resolveClassesValues( options.classes, instance );
|
289
|
-
instance.element[ instance.widgetName ]( options );
|
290
|
-
} else {
|
291
|
-
that._updateCornerClass( children[ value ](), value );
|
292
|
-
}
|
293
|
-
} );
|
294
|
-
|
295
|
-
// Finally call the refresh method on each of the child widgets.
|
296
|
-
this._callChildMethod( "refresh" );
|
297
|
-
}
|
298
|
-
}
|
299
|
-
} );
|
300
|
-
} ) );
|