fuelux-rails 2.2.0.beta.1 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -2
- data/lib/fuelux-rails/version.rb +1 -1
- data/vendor/assets/javascripts/fuelux/checkbox.js +1 -1
- data/vendor/assets/javascripts/fuelux/combobox.js +3 -6
- data/vendor/assets/javascripts/fuelux/datagrid.js +64 -7
- data/vendor/assets/javascripts/fuelux/loader.js +226 -138
- data/vendor/assets/javascripts/fuelux/pillbox.js +1 -2
- data/vendor/assets/javascripts/fuelux/search.js +19 -4
- data/vendor/assets/javascripts/fuelux/spinner.js +18 -3
- data/vendor/assets/javascripts/fuelux/util.js +1 -1
- data/vendor/assets/javascripts/fuelux/wizard.js +147 -143
- data/vendor/toolkit/fuelux/checkbox.less +1 -1
- data/vendor/toolkit/fuelux/datagrid.less +45 -1
- data/vendor/toolkit/fuelux/radio.less +1 -1
- metadata +7 -7
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
# Fuel UX for Rails 3.1 Asset Pipeline
|
1
|
+
# Fuel UX for Rails 3.1/Rails 4.0 Asset Pipeline
|
2
2
|
Extends Twitter Bootstrap with additional lightweight JavaScript controls. Easy to install, customize, update, and optimize.
|
3
3
|
|
4
|
-
fuelux-rails project integrates Fuel UX into the Twitter Bootstrap CSS toolkit for Rails 3.1 Asset Pipeline (Rails 3.2 supported)
|
4
|
+
fuelux-rails project integrates Fuel UX into the Twitter Bootstrap CSS toolkit for Rails 3.1/Rails 4.0 Asset Pipeline (Rails 3.2 supported)
|
5
5
|
|
6
6
|
## Installing Gem
|
7
7
|
|
data/lib/fuelux-rails/version.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
*/
|
8
8
|
|
9
9
|
!function ($) {
|
10
|
-
|
10
|
+
|
11
11
|
// COMBOBOX CONSTRUCTOR AND PROTOTYPE
|
12
12
|
|
13
13
|
var Combobox = function (element, options) {
|
@@ -72,11 +72,8 @@
|
|
72
72
|
setDefaultSelection: function () {
|
73
73
|
var selector = 'li[data-selected=true]:first';
|
74
74
|
var item = this.$element.find(selector);
|
75
|
-
|
76
|
-
|
77
|
-
this.selectByIndex(0);
|
78
|
-
}
|
79
|
-
else {
|
75
|
+
|
76
|
+
if (item.length > 0) {
|
80
77
|
// select by data-attribute
|
81
78
|
this.selectBySelector(selector);
|
82
79
|
item.removeData('selected');
|
@@ -13,8 +13,9 @@
|
|
13
13
|
var Datagrid = function (element, options) {
|
14
14
|
this.$element = $(element);
|
15
15
|
this.$thead = this.$element.find('thead');
|
16
|
+
this.$tfoot = this.$element.find('tfoot');
|
16
17
|
this.$footer = this.$element.find('tfoot th');
|
17
|
-
this.$footerchildren = this.$footer.children();
|
18
|
+
this.$footerchildren = this.$footer.children().show().css('visibility', 'hidden');
|
18
19
|
this.$topheader = this.$element.find('thead th');
|
19
20
|
this.$searchcontrol = this.$element.find('.search');
|
20
21
|
this.$pagesize = this.$element.find('.grid-pagesize');
|
@@ -30,7 +31,7 @@
|
|
30
31
|
this.$tbody = $('<tbody>').insertAfter(this.$thead);
|
31
32
|
this.$colheader = $('<tr>').appendTo(this.$thead);
|
32
33
|
|
33
|
-
this.options = $.extend({}, $.fn.datagrid.defaults, options);
|
34
|
+
this.options = $.extend(true, {}, $.fn.datagrid.defaults, options);
|
34
35
|
this.options.dataOptions.pageSize = parseInt(this.$pagesize.val(), 10);
|
35
36
|
this.columns = this.options.dataSource.columns();
|
36
37
|
|
@@ -42,6 +43,9 @@
|
|
42
43
|
this.$pageinput.on('change', $.proxy(this.pageChanged, this));
|
43
44
|
|
44
45
|
this.renderColumns();
|
46
|
+
|
47
|
+
if (this.options.stretchHeight) this.initStretchHeight();
|
48
|
+
|
45
49
|
this.renderData();
|
46
50
|
};
|
47
51
|
|
@@ -102,13 +106,14 @@
|
|
102
106
|
var self = this;
|
103
107
|
|
104
108
|
this.$tbody.html(this.placeholderRowHTML(this.options.loadingHTML));
|
105
|
-
this.$footerchildren.hide();
|
106
109
|
|
107
110
|
this.options.dataSource.data(this.options.dataOptions, function (data) {
|
108
111
|
var itemdesc = (data.count === 1) ? self.options.itemText : self.options.itemsText;
|
109
112
|
var rowHTML = '';
|
110
113
|
|
111
|
-
self.$footerchildren.
|
114
|
+
self.$footerchildren.css('visibility', function () {
|
115
|
+
return (data.count > 0) ? 'visible' : 'hidden';
|
116
|
+
});
|
112
117
|
|
113
118
|
self.$pageinput.val(data.page);
|
114
119
|
self.$pageslabel.text(data.pages);
|
@@ -130,13 +135,15 @@
|
|
130
135
|
if (!rowHTML) rowHTML = self.placeholderRowHTML('0 ' + self.options.itemsText);
|
131
136
|
|
132
137
|
self.$tbody.html(rowHTML);
|
138
|
+
self.stretchHeight();
|
139
|
+
|
133
140
|
self.$element.trigger('loaded');
|
134
141
|
});
|
135
142
|
|
136
143
|
},
|
137
144
|
|
138
145
|
placeholderRowHTML: function (content) {
|
139
|
-
return '<tr><td style="text-align:center;padding:20px;" colspan="' +
|
146
|
+
return '<tr><td style="text-align:center;padding:20px;border-bottom:none;" colspan="' +
|
140
147
|
this.columns.length + '">' + content + '</td></tr>';
|
141
148
|
},
|
142
149
|
|
@@ -190,8 +197,58 @@
|
|
190
197
|
reload: function () {
|
191
198
|
this.options.dataOptions.pageIndex = 0;
|
192
199
|
this.renderData();
|
193
|
-
}
|
200
|
+
},
|
201
|
+
|
202
|
+
initStretchHeight: function () {
|
203
|
+
this.$gridContainer = this.$element.parent();
|
204
|
+
|
205
|
+
this.$element.wrap('<div class="datagrid-stretch-wrapper">');
|
206
|
+
this.$stretchWrapper = this.$element.parent();
|
207
|
+
|
208
|
+
this.$headerTable = $('<table>').attr('class', this.$element.attr('class'));
|
209
|
+
this.$footerTable = this.$headerTable.clone();
|
210
|
+
|
211
|
+
this.$headerTable.prependTo(this.$gridContainer).addClass('datagrid-stretch-header');
|
212
|
+
this.$thead.detach().appendTo(this.$headerTable);
|
213
|
+
|
214
|
+
this.$sizingHeader = this.$thead.clone();
|
215
|
+
this.$sizingHeader.find('tr:first').remove();
|
216
|
+
|
217
|
+
this.$footerTable.appendTo(this.$gridContainer).addClass('datagrid-stretch-footer');
|
218
|
+
this.$tfoot.detach().appendTo(this.$footerTable);
|
219
|
+
},
|
194
220
|
|
221
|
+
stretchHeight: function () {
|
222
|
+
if (!this.$gridContainer) return;
|
223
|
+
|
224
|
+
this.setColumnWidths();
|
225
|
+
|
226
|
+
var targetHeight = this.$gridContainer.height();
|
227
|
+
var headerHeight = this.$headerTable.outerHeight();
|
228
|
+
var footerHeight = this.$footerTable.outerHeight();
|
229
|
+
var overhead = headerHeight + footerHeight;
|
230
|
+
|
231
|
+
this.$stretchWrapper.height(targetHeight - overhead);
|
232
|
+
},
|
233
|
+
|
234
|
+
setColumnWidths: function () {
|
235
|
+
if (!this.$sizingHeader) return;
|
236
|
+
|
237
|
+
this.$element.prepend(this.$sizingHeader);
|
238
|
+
|
239
|
+
var $sizingCells = this.$sizingHeader.find('th');
|
240
|
+
var columnCount = $sizingCells.length;
|
241
|
+
|
242
|
+
function matchSizingCellWidth(i, el) {
|
243
|
+
if (i === columnCount - 1) return;
|
244
|
+
$(el).width($sizingCells.eq(i).width());
|
245
|
+
}
|
246
|
+
|
247
|
+
this.$colheader.find('th').each(matchSizingCellWidth);
|
248
|
+
this.$tbody.find('tr:first > td').each(matchSizingCellWidth);
|
249
|
+
|
250
|
+
this.$sizingHeader.detach();
|
251
|
+
}
|
195
252
|
};
|
196
253
|
|
197
254
|
|
@@ -217,4 +274,4 @@
|
|
217
274
|
|
218
275
|
$.fn.datagrid.Constructor = Datagrid;
|
219
276
|
|
220
|
-
}(window.jQuery);
|
277
|
+
}(window.jQuery);
|
@@ -2843,11 +2843,8 @@ define('fuelux/combobox',['require','jquery','./util'],function (require) {
|
|
2843
2843
|
setDefaultSelection: function () {
|
2844
2844
|
var selector = 'li[data-selected=true]:first';
|
2845
2845
|
var item = this.$element.find(selector);
|
2846
|
-
|
2847
|
-
|
2848
|
-
this.selectByIndex(0);
|
2849
|
-
}
|
2850
|
-
else {
|
2846
|
+
|
2847
|
+
if (item.length > 0) {
|
2851
2848
|
// select by data-attribute
|
2852
2849
|
this.selectBySelector(selector);
|
2853
2850
|
item.removeData('selected');
|
@@ -2966,8 +2963,9 @@ define('fuelux/datagrid',['require','jquery'],function(require) {
|
|
2966
2963
|
var Datagrid = function (element, options) {
|
2967
2964
|
this.$element = $(element);
|
2968
2965
|
this.$thead = this.$element.find('thead');
|
2966
|
+
this.$tfoot = this.$element.find('tfoot');
|
2969
2967
|
this.$footer = this.$element.find('tfoot th');
|
2970
|
-
this.$footerchildren = this.$footer.children();
|
2968
|
+
this.$footerchildren = this.$footer.children().show().css('visibility', 'hidden');
|
2971
2969
|
this.$topheader = this.$element.find('thead th');
|
2972
2970
|
this.$searchcontrol = this.$element.find('.search');
|
2973
2971
|
this.$pagesize = this.$element.find('.grid-pagesize');
|
@@ -2983,7 +2981,7 @@ define('fuelux/datagrid',['require','jquery'],function(require) {
|
|
2983
2981
|
this.$tbody = $('<tbody>').insertAfter(this.$thead);
|
2984
2982
|
this.$colheader = $('<tr>').appendTo(this.$thead);
|
2985
2983
|
|
2986
|
-
this.options = $.extend({}, $.fn.datagrid.defaults, options);
|
2984
|
+
this.options = $.extend(true, {}, $.fn.datagrid.defaults, options);
|
2987
2985
|
this.options.dataOptions.pageSize = parseInt(this.$pagesize.val(), 10);
|
2988
2986
|
this.columns = this.options.dataSource.columns();
|
2989
2987
|
|
@@ -2995,6 +2993,9 @@ define('fuelux/datagrid',['require','jquery'],function(require) {
|
|
2995
2993
|
this.$pageinput.on('change', $.proxy(this.pageChanged, this));
|
2996
2994
|
|
2997
2995
|
this.renderColumns();
|
2996
|
+
|
2997
|
+
if (this.options.stretchHeight) this.initStretchHeight();
|
2998
|
+
|
2998
2999
|
this.renderData();
|
2999
3000
|
};
|
3000
3001
|
|
@@ -3055,13 +3056,14 @@ define('fuelux/datagrid',['require','jquery'],function(require) {
|
|
3055
3056
|
var self = this;
|
3056
3057
|
|
3057
3058
|
this.$tbody.html(this.placeholderRowHTML(this.options.loadingHTML));
|
3058
|
-
this.$footerchildren.hide();
|
3059
3059
|
|
3060
3060
|
this.options.dataSource.data(this.options.dataOptions, function (data) {
|
3061
3061
|
var itemdesc = (data.count === 1) ? self.options.itemText : self.options.itemsText;
|
3062
3062
|
var rowHTML = '';
|
3063
3063
|
|
3064
|
-
self.$footerchildren.
|
3064
|
+
self.$footerchildren.css('visibility', function () {
|
3065
|
+
return (data.count > 0) ? 'visible' : 'hidden';
|
3066
|
+
});
|
3065
3067
|
|
3066
3068
|
self.$pageinput.val(data.page);
|
3067
3069
|
self.$pageslabel.text(data.pages);
|
@@ -3083,13 +3085,15 @@ define('fuelux/datagrid',['require','jquery'],function(require) {
|
|
3083
3085
|
if (!rowHTML) rowHTML = self.placeholderRowHTML('0 ' + self.options.itemsText);
|
3084
3086
|
|
3085
3087
|
self.$tbody.html(rowHTML);
|
3088
|
+
self.stretchHeight();
|
3089
|
+
|
3086
3090
|
self.$element.trigger('loaded');
|
3087
3091
|
});
|
3088
3092
|
|
3089
3093
|
},
|
3090
3094
|
|
3091
3095
|
placeholderRowHTML: function (content) {
|
3092
|
-
return '<tr><td style="text-align:center;padding:20px;" colspan="' +
|
3096
|
+
return '<tr><td style="text-align:center;padding:20px;border-bottom:none;" colspan="' +
|
3093
3097
|
this.columns.length + '">' + content + '</td></tr>';
|
3094
3098
|
},
|
3095
3099
|
|
@@ -3143,8 +3147,58 @@ define('fuelux/datagrid',['require','jquery'],function(require) {
|
|
3143
3147
|
reload: function () {
|
3144
3148
|
this.options.dataOptions.pageIndex = 0;
|
3145
3149
|
this.renderData();
|
3146
|
-
}
|
3150
|
+
},
|
3151
|
+
|
3152
|
+
initStretchHeight: function () {
|
3153
|
+
this.$gridContainer = this.$element.parent();
|
3154
|
+
|
3155
|
+
this.$element.wrap('<div class="datagrid-stretch-wrapper">');
|
3156
|
+
this.$stretchWrapper = this.$element.parent();
|
3157
|
+
|
3158
|
+
this.$headerTable = $('<table>').attr('class', this.$element.attr('class'));
|
3159
|
+
this.$footerTable = this.$headerTable.clone();
|
3160
|
+
|
3161
|
+
this.$headerTable.prependTo(this.$gridContainer).addClass('datagrid-stretch-header');
|
3162
|
+
this.$thead.detach().appendTo(this.$headerTable);
|
3163
|
+
|
3164
|
+
this.$sizingHeader = this.$thead.clone();
|
3165
|
+
this.$sizingHeader.find('tr:first').remove();
|
3166
|
+
|
3167
|
+
this.$footerTable.appendTo(this.$gridContainer).addClass('datagrid-stretch-footer');
|
3168
|
+
this.$tfoot.detach().appendTo(this.$footerTable);
|
3169
|
+
},
|
3170
|
+
|
3171
|
+
stretchHeight: function () {
|
3172
|
+
if (!this.$gridContainer) return;
|
3173
|
+
|
3174
|
+
this.setColumnWidths();
|
3175
|
+
|
3176
|
+
var targetHeight = this.$gridContainer.height();
|
3177
|
+
var headerHeight = this.$headerTable.outerHeight();
|
3178
|
+
var footerHeight = this.$footerTable.outerHeight();
|
3179
|
+
var overhead = headerHeight + footerHeight;
|
3180
|
+
|
3181
|
+
this.$stretchWrapper.height(targetHeight - overhead);
|
3182
|
+
},
|
3183
|
+
|
3184
|
+
setColumnWidths: function () {
|
3185
|
+
if (!this.$sizingHeader) return;
|
3186
|
+
|
3187
|
+
this.$element.prepend(this.$sizingHeader);
|
3188
|
+
|
3189
|
+
var $sizingCells = this.$sizingHeader.find('th');
|
3190
|
+
var columnCount = $sizingCells.length;
|
3191
|
+
|
3192
|
+
function matchSizingCellWidth(i, el) {
|
3193
|
+
if (i === columnCount - 1) return;
|
3194
|
+
$(el).width($sizingCells.eq(i).width());
|
3195
|
+
}
|
3147
3196
|
|
3197
|
+
this.$colheader.find('th').each(matchSizingCellWidth);
|
3198
|
+
this.$tbody.find('tr:first > td').each(matchSizingCellWidth);
|
3199
|
+
|
3200
|
+
this.$sizingHeader.detach();
|
3201
|
+
}
|
3148
3202
|
};
|
3149
3203
|
|
3150
3204
|
|
@@ -3372,9 +3426,14 @@ define('fuelux/search',['require','jquery'],function(require) {
|
|
3372
3426
|
var Search = function (element, options) {
|
3373
3427
|
this.$element = $(element);
|
3374
3428
|
this.options = $.extend({}, $.fn.search.defaults, options);
|
3375
|
-
|
3376
|
-
this.$
|
3377
|
-
|
3429
|
+
|
3430
|
+
this.$button = this.$element.find('button')
|
3431
|
+
.on('click', $.proxy(this.buttonclicked, this));
|
3432
|
+
|
3433
|
+
this.$input = this.$element.find('input')
|
3434
|
+
.on('keydown', $.proxy(this.keypress, this))
|
3435
|
+
.on('keyup', $.proxy(this.keypressed, this));
|
3436
|
+
|
3378
3437
|
this.$icon = this.$element.find('i');
|
3379
3438
|
this.activeSearch = '';
|
3380
3439
|
};
|
@@ -3430,6 +3489,16 @@ define('fuelux/search',['require','jquery'],function(require) {
|
|
3430
3489
|
inputPresentAndUnchanged = val && (val === this.activeSearch);
|
3431
3490
|
this.$icon.attr('class', inputPresentAndUnchanged ? 'icon-remove' : 'icon-search');
|
3432
3491
|
}
|
3492
|
+
},
|
3493
|
+
|
3494
|
+
disable: function () {
|
3495
|
+
this.$input.attr('disabled', 'disabled');
|
3496
|
+
this.$button.addClass('disabled');
|
3497
|
+
},
|
3498
|
+
|
3499
|
+
enable: function () {
|
3500
|
+
this.$input.removeAttr('disabled');
|
3501
|
+
this.$button.removeClass('disabled');
|
3433
3502
|
}
|
3434
3503
|
|
3435
3504
|
};
|
@@ -3509,6 +3578,8 @@ define('fuelux/spinner',['require','jquery'],function(require) {
|
|
3509
3578
|
this.switches.speed = 500;
|
3510
3579
|
}
|
3511
3580
|
|
3581
|
+
this.lastValue = null;
|
3582
|
+
|
3512
3583
|
this.render();
|
3513
3584
|
|
3514
3585
|
if (this.options.disabled) {
|
@@ -3535,12 +3606,25 @@ define('fuelux/spinner',['require','jquery'],function(require) {
|
|
3535
3606
|
this.options.value = newVal/1;
|
3536
3607
|
}
|
3537
3608
|
|
3538
|
-
this
|
3609
|
+
this.triggerChangedEvent();
|
3539
3610
|
},
|
3540
3611
|
|
3541
3612
|
stopSpin: function () {
|
3542
3613
|
clearTimeout(this.switches.timeout);
|
3543
3614
|
this.switches.count = 1;
|
3615
|
+
this.triggerChangedEvent();
|
3616
|
+
},
|
3617
|
+
|
3618
|
+
triggerChangedEvent: function () {
|
3619
|
+
var currentValue = this.value();
|
3620
|
+
if (currentValue === this.lastValue) return;
|
3621
|
+
|
3622
|
+
this.lastValue = currentValue;
|
3623
|
+
|
3624
|
+
// Primary changed event
|
3625
|
+
this.$element.trigger('changed', currentValue);
|
3626
|
+
|
3627
|
+
// Undocumented, kept for backward compatibility
|
3544
3628
|
this.$element.trigger('change');
|
3545
3629
|
},
|
3546
3630
|
|
@@ -3644,7 +3728,7 @@ define('fuelux/spinner',['require','jquery'],function(require) {
|
|
3644
3728
|
$(function () {
|
3645
3729
|
$('body').on('mousedown.spinner.data-api', '.spinner', function (e) {
|
3646
3730
|
var $this = $(this);
|
3647
|
-
if ($this.data('
|
3731
|
+
if ($this.data('spinner')) return;
|
3648
3732
|
$this.spinner($this.data());
|
3649
3733
|
});
|
3650
3734
|
});
|
@@ -3998,153 +4082,157 @@ define('fuelux/tree',['require','jquery'],function(require) {
|
|
3998
4082
|
* Licensed under the MIT license.
|
3999
4083
|
*/
|
4000
4084
|
|
4001
|
-
define('fuelux/wizard',['require','jquery'],function(require) {
|
4085
|
+
define('fuelux/wizard',['require','jquery'],function (require) {
|
4002
4086
|
|
4003
|
-
|
4087
|
+
var $ = require('jquery');
|
4004
4088
|
|
4005
4089
|
|
4006
|
-
|
4090
|
+
// WIZARD CONSTRUCTOR AND PROTOTYPE
|
4007
4091
|
|
4008
|
-
|
4009
|
-
|
4010
|
-
|
4011
|
-
|
4012
|
-
|
4013
|
-
|
4014
|
-
|
4015
|
-
|
4016
|
-
|
4017
|
-
// handle events
|
4018
|
-
this.$prevBtn.on('click', $.proxy(this.previous, this));
|
4019
|
-
this.$nextBtn.on('click', $.proxy(this.next, this));
|
4020
|
-
this.$element.on('click', 'li.complete', $.proxy(this.stepclicked, this));
|
4021
|
-
};
|
4092
|
+
var Wizard = function (element, options) {
|
4093
|
+
this.$element = $(element);
|
4094
|
+
this.options = $.extend({}, $.fn.wizard.defaults, options);
|
4095
|
+
this.currentStep = 1;
|
4096
|
+
this.numSteps = this.$element.find('li').length;
|
4097
|
+
this.$prevBtn = this.$element.find('button.btn-prev');
|
4098
|
+
this.$nextBtn = this.$element.find('button.btn-next');
|
4099
|
+
this.nextText = this.$nextBtn.text();
|
4022
4100
|
|
4023
|
-
|
4024
|
-
|
4025
|
-
|
4026
|
-
|
4027
|
-
|
4028
|
-
var canMoveNext = (this.currentStep + 1 <= this.numSteps);
|
4029
|
-
var lastStep = (this.currentStep === this.numSteps);
|
4030
|
-
var canMovePrev = (this.currentStep > 1);
|
4031
|
-
var firstStep = (this.currentStep === 1);
|
4032
|
-
|
4033
|
-
// disable buttons based on current step
|
4034
|
-
this.$prevBtn.attr('disabled', (firstStep === true || canMovePrev === false));
|
4035
|
-
this.$nextBtn.attr('disabled', (lastStep === true || canMoveNext === false));
|
4036
|
-
|
4037
|
-
// change button text of last step, if specified
|
4038
|
-
var data = this.$nextBtn.data();
|
4039
|
-
if(data && data.last) {
|
4040
|
-
this.lastText = data.last;
|
4041
|
-
if(typeof this.lastText !== 'undefined') {
|
4042
|
-
var text = (lastStep !== true) ? this.nextText : this.lastText;
|
4043
|
-
this.$nextBtn
|
4044
|
-
.contents()
|
4045
|
-
.filter(function() {
|
4046
|
-
return this.nodeType === 3;
|
4047
|
-
}).replaceWith(text);
|
4048
|
-
}
|
4049
|
-
}
|
4101
|
+
// handle events
|
4102
|
+
this.$prevBtn.on('click', $.proxy(this.previous, this));
|
4103
|
+
this.$nextBtn.on('click', $.proxy(this.next, this));
|
4104
|
+
this.$element.on('click', 'li.complete', $.proxy(this.stepclicked, this));
|
4105
|
+
};
|
4050
4106
|
|
4051
|
-
|
4052
|
-
|
4053
|
-
|
4054
|
-
|
4055
|
-
|
4056
|
-
|
4057
|
-
|
4058
|
-
|
4059
|
-
|
4060
|
-
|
4061
|
-
|
4062
|
-
|
4063
|
-
|
4064
|
-
|
4065
|
-
|
4066
|
-
|
4067
|
-
|
4068
|
-
|
4069
|
-
|
4070
|
-
|
4071
|
-
|
4072
|
-
|
4073
|
-
|
4074
|
-
|
4107
|
+
Wizard.prototype = {
|
4108
|
+
|
4109
|
+
constructor: Wizard,
|
4110
|
+
|
4111
|
+
setState: function () {
|
4112
|
+
var canMovePrev = (this.currentStep > 1);
|
4113
|
+
var firstStep = (this.currentStep === 1);
|
4114
|
+
var lastStep = (this.currentStep === this.numSteps);
|
4115
|
+
|
4116
|
+
// disable buttons based on current step
|
4117
|
+
this.$prevBtn.attr('disabled', (firstStep === true || canMovePrev === false));
|
4118
|
+
|
4119
|
+
// change button text of last step, if specified
|
4120
|
+
var data = this.$nextBtn.data();
|
4121
|
+
if (data && data.last) {
|
4122
|
+
this.lastText = data.last;
|
4123
|
+
if (typeof this.lastText !== 'undefined') {
|
4124
|
+
// replace text
|
4125
|
+
var text = (lastStep !== true) ? this.nextText : this.lastText;
|
4126
|
+
this.$nextBtn
|
4127
|
+
.contents()
|
4128
|
+
.filter(function () {
|
4129
|
+
return this.nodeType === 3;
|
4130
|
+
}).replaceWith(text);
|
4131
|
+
}
|
4132
|
+
}
|
4075
4133
|
|
4076
|
-
|
4077
|
-
|
4134
|
+
// reset classes for all steps
|
4135
|
+
var $steps = this.$element.find('li');
|
4136
|
+
$steps.removeClass('active').removeClass('complete');
|
4137
|
+
$steps.find('span.badge').removeClass('badge-info').removeClass('badge-success');
|
4138
|
+
|
4139
|
+
// set class for all previous steps
|
4140
|
+
var prevSelector = 'li:lt(' + (this.currentStep - 1) + ')';
|
4141
|
+
var $prevSteps = this.$element.find(prevSelector);
|
4142
|
+
$prevSteps.addClass('complete');
|
4143
|
+
$prevSteps.find('span.badge').addClass('badge-success');
|
4144
|
+
|
4145
|
+
// set class for current step
|
4146
|
+
var currentSelector = 'li:eq(' + (this.currentStep - 1) + ')';
|
4147
|
+
var $currentStep = this.$element.find(currentSelector);
|
4148
|
+
$currentStep.addClass('active');
|
4149
|
+
$currentStep.find('span.badge').addClass('badge-info');
|
4150
|
+
|
4151
|
+
// set display of target element
|
4152
|
+
var target = $currentStep.data().target;
|
4153
|
+
$('.step-pane').removeClass('active');
|
4154
|
+
$(target).addClass('active');
|
4155
|
+
|
4156
|
+
this.$element.trigger('changed');
|
4157
|
+
},
|
4078
4158
|
|
4079
|
-
|
4080
|
-
|
4081
|
-
this.setState();
|
4082
|
-
},
|
4159
|
+
stepclicked: function (e) {
|
4160
|
+
var li = $(e.currentTarget);
|
4083
4161
|
|
4084
|
-
|
4085
|
-
|
4086
|
-
|
4087
|
-
|
4088
|
-
this.$element.trigger(e, {step:this.currentStep, direction:'previous'});
|
4089
|
-
if (e.isDefaultPrevented()) return;
|
4162
|
+
var index = $('.steps li').index(li);
|
4163
|
+
this.currentStep = (index + 1);
|
4164
|
+
this.setState();
|
4165
|
+
},
|
4090
4166
|
|
4091
|
-
|
4092
|
-
|
4093
|
-
|
4094
|
-
|
4167
|
+
previous: function () {
|
4168
|
+
var canMovePrev = (this.currentStep > 1);
|
4169
|
+
if (canMovePrev) {
|
4170
|
+
var e = $.Event('change');
|
4171
|
+
this.$element.trigger(e, {step: this.currentStep, direction: 'previous'});
|
4172
|
+
if (e.isDefaultPrevented()) return;
|
4173
|
+
|
4174
|
+
this.currentStep -= 1;
|
4175
|
+
this.setState();
|
4176
|
+
}
|
4177
|
+
},
|
4095
4178
|
|
4096
|
-
|
4097
|
-
|
4098
|
-
|
4099
|
-
var e = $.Event('change');
|
4100
|
-
this.$element.trigger(e, {step:this.currentStep, direction:'next'});
|
4179
|
+
next: function () {
|
4180
|
+
var canMoveNext = (this.currentStep + 1 <= this.numSteps);
|
4181
|
+
var lastStep = (this.currentStep === this.numSteps);
|
4101
4182
|
|
4102
|
-
|
4183
|
+
if (canMoveNext) {
|
4184
|
+
var e = $.Event('change');
|
4185
|
+
this.$element.trigger(e, {step: this.currentStep, direction: 'next'});
|
4103
4186
|
|
4104
|
-
|
4105
|
-
this.setState();
|
4106
|
-
}
|
4107
|
-
},
|
4187
|
+
if (e.isDefaultPrevented()) return;
|
4108
4188
|
|
4109
|
-
|
4110
|
-
|
4111
|
-
|
4112
|
-
|
4113
|
-
|
4114
|
-
|
4189
|
+
this.currentStep += 1;
|
4190
|
+
this.setState();
|
4191
|
+
}
|
4192
|
+
else if (lastStep) {
|
4193
|
+
this.$element.trigger('finished');
|
4194
|
+
}
|
4195
|
+
},
|
4115
4196
|
|
4197
|
+
selectedItem: function (val) {
|
4198
|
+
return {
|
4199
|
+
step: this.currentStep
|
4200
|
+
};
|
4201
|
+
}
|
4202
|
+
};
|
4116
4203
|
|
4117
|
-
// WIZARD PLUGIN DEFINITION
|
4118
4204
|
|
4119
|
-
|
4120
|
-
var methodReturn;
|
4205
|
+
// WIZARD PLUGIN DEFINITION
|
4121
4206
|
|
4122
|
-
|
4123
|
-
|
4124
|
-
var data = $this.data('wizard');
|
4125
|
-
var options = typeof option === 'object' && option;
|
4207
|
+
$.fn.wizard = function (option, value) {
|
4208
|
+
var methodReturn;
|
4126
4209
|
|
4127
|
-
|
4128
|
-
|
4129
|
-
|
4210
|
+
var $set = this.each(function () {
|
4211
|
+
var $this = $(this);
|
4212
|
+
var data = $this.data('wizard');
|
4213
|
+
var options = typeof option === 'object' && option;
|
4130
4214
|
|
4131
|
-
|
4132
|
-
|
4215
|
+
if (!data) $this.data('wizard', (data = new Wizard(this, options)));
|
4216
|
+
if (typeof option === 'string') methodReturn = data[option](value);
|
4217
|
+
});
|
4133
4218
|
|
4134
|
-
|
4219
|
+
return (methodReturn === undefined) ? $set : methodReturn;
|
4220
|
+
};
|
4135
4221
|
|
4136
|
-
|
4222
|
+
$.fn.wizard.defaults = {};
|
4137
4223
|
|
4224
|
+
$.fn.wizard.Constructor = Wizard;
|
4138
4225
|
|
4139
|
-
// WIZARD DATA-API
|
4140
4226
|
|
4141
|
-
|
4142
|
-
|
4143
|
-
|
4144
|
-
|
4145
|
-
|
4146
|
-
|
4147
|
-
|
4227
|
+
// WIZARD DATA-API
|
4228
|
+
|
4229
|
+
$(function () {
|
4230
|
+
$('body').on('mousedown.wizard.data-api', '.wizard', function () {
|
4231
|
+
var $this = $(this);
|
4232
|
+
if ($this.data('wizard')) return;
|
4233
|
+
$this.wizard($this.data());
|
4234
|
+
});
|
4235
|
+
});
|
4148
4236
|
|
4149
4237
|
});
|
4150
4238
|
|
@@ -13,9 +13,14 @@
|
|
13
13
|
var Search = function (element, options) {
|
14
14
|
this.$element = $(element);
|
15
15
|
this.options = $.extend({}, $.fn.search.defaults, options);
|
16
|
-
|
17
|
-
this.$
|
18
|
-
|
16
|
+
|
17
|
+
this.$button = this.$element.find('button')
|
18
|
+
.on('click', $.proxy(this.buttonclicked, this));
|
19
|
+
|
20
|
+
this.$input = this.$element.find('input')
|
21
|
+
.on('keydown', $.proxy(this.keypress, this))
|
22
|
+
.on('keyup', $.proxy(this.keypressed, this));
|
23
|
+
|
19
24
|
this.$icon = this.$element.find('i');
|
20
25
|
this.activeSearch = '';
|
21
26
|
};
|
@@ -71,6 +76,16 @@
|
|
71
76
|
inputPresentAndUnchanged = val && (val === this.activeSearch);
|
72
77
|
this.$icon.attr('class', inputPresentAndUnchanged ? 'icon-remove' : 'icon-search');
|
73
78
|
}
|
79
|
+
},
|
80
|
+
|
81
|
+
disable: function () {
|
82
|
+
this.$input.attr('disabled', 'disabled');
|
83
|
+
this.$button.addClass('disabled');
|
84
|
+
},
|
85
|
+
|
86
|
+
enable: function () {
|
87
|
+
this.$input.removeAttr('disabled');
|
88
|
+
this.$button.removeClass('disabled');
|
74
89
|
}
|
75
90
|
|
76
91
|
};
|
@@ -104,4 +119,4 @@
|
|
104
119
|
});
|
105
120
|
});
|
106
121
|
|
107
|
-
}(window.jQuery);
|
122
|
+
}(window.jQuery);
|
@@ -39,6 +39,8 @@
|
|
39
39
|
this.switches.speed = 500;
|
40
40
|
}
|
41
41
|
|
42
|
+
this.lastValue = null;
|
43
|
+
|
42
44
|
this.render();
|
43
45
|
|
44
46
|
if (this.options.disabled) {
|
@@ -65,12 +67,25 @@
|
|
65
67
|
this.options.value = newVal/1;
|
66
68
|
}
|
67
69
|
|
68
|
-
this
|
70
|
+
this.triggerChangedEvent();
|
69
71
|
},
|
70
72
|
|
71
73
|
stopSpin: function () {
|
72
74
|
clearTimeout(this.switches.timeout);
|
73
75
|
this.switches.count = 1;
|
76
|
+
this.triggerChangedEvent();
|
77
|
+
},
|
78
|
+
|
79
|
+
triggerChangedEvent: function () {
|
80
|
+
var currentValue = this.value();
|
81
|
+
if (currentValue === this.lastValue) return;
|
82
|
+
|
83
|
+
this.lastValue = currentValue;
|
84
|
+
|
85
|
+
// Primary changed event
|
86
|
+
this.$element.trigger('changed', currentValue);
|
87
|
+
|
88
|
+
// Undocumented, kept for backward compatibility
|
74
89
|
this.$element.trigger('change');
|
75
90
|
},
|
76
91
|
|
@@ -174,9 +189,9 @@
|
|
174
189
|
$(function () {
|
175
190
|
$('body').on('mousedown.spinner.data-api', '.spinner', function (e) {
|
176
191
|
var $this = $(this);
|
177
|
-
if ($this.data('
|
192
|
+
if ($this.data('spinner')) return;
|
178
193
|
$this.spinner($this.data());
|
179
194
|
});
|
180
195
|
});
|
181
196
|
|
182
|
-
}(window.jQuery);
|
197
|
+
}(window.jQuery);
|
@@ -8,147 +8,151 @@
|
|
8
8
|
|
9
9
|
!function ($) {
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
11
|
+
// WIZARD CONSTRUCTOR AND PROTOTYPE
|
12
|
+
|
13
|
+
var Wizard = function (element, options) {
|
14
|
+
this.$element = $(element);
|
15
|
+
this.options = $.extend({}, $.fn.wizard.defaults, options);
|
16
|
+
this.currentStep = 1;
|
17
|
+
this.numSteps = this.$element.find('li').length;
|
18
|
+
this.$prevBtn = this.$element.find('button.btn-prev');
|
19
|
+
this.$nextBtn = this.$element.find('button.btn-next');
|
20
|
+
this.nextText = this.$nextBtn.text();
|
21
|
+
|
22
|
+
// handle events
|
23
|
+
this.$prevBtn.on('click', $.proxy(this.previous, this));
|
24
|
+
this.$nextBtn.on('click', $.proxy(this.next, this));
|
25
|
+
this.$element.on('click', 'li.complete', $.proxy(this.stepclicked, this));
|
26
|
+
};
|
27
|
+
|
28
|
+
Wizard.prototype = {
|
29
|
+
|
30
|
+
constructor: Wizard,
|
31
|
+
|
32
|
+
setState: function () {
|
33
|
+
var canMovePrev = (this.currentStep > 1);
|
34
|
+
var firstStep = (this.currentStep === 1);
|
35
|
+
var lastStep = (this.currentStep === this.numSteps);
|
36
|
+
|
37
|
+
// disable buttons based on current step
|
38
|
+
this.$prevBtn.attr('disabled', (firstStep === true || canMovePrev === false));
|
39
|
+
|
40
|
+
// change button text of last step, if specified
|
41
|
+
var data = this.$nextBtn.data();
|
42
|
+
if (data && data.last) {
|
43
|
+
this.lastText = data.last;
|
44
|
+
if (typeof this.lastText !== 'undefined') {
|
45
|
+
// replace text
|
46
|
+
var text = (lastStep !== true) ? this.nextText : this.lastText;
|
47
|
+
this.$nextBtn
|
48
|
+
.contents()
|
49
|
+
.filter(function () {
|
50
|
+
return this.nodeType === 3;
|
51
|
+
}).replaceWith(text);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
// reset classes for all steps
|
56
|
+
var $steps = this.$element.find('li');
|
57
|
+
$steps.removeClass('active').removeClass('complete');
|
58
|
+
$steps.find('span.badge').removeClass('badge-info').removeClass('badge-success');
|
59
|
+
|
60
|
+
// set class for all previous steps
|
61
|
+
var prevSelector = 'li:lt(' + (this.currentStep - 1) + ')';
|
62
|
+
var $prevSteps = this.$element.find(prevSelector);
|
63
|
+
$prevSteps.addClass('complete');
|
64
|
+
$prevSteps.find('span.badge').addClass('badge-success');
|
65
|
+
|
66
|
+
// set class for current step
|
67
|
+
var currentSelector = 'li:eq(' + (this.currentStep - 1) + ')';
|
68
|
+
var $currentStep = this.$element.find(currentSelector);
|
69
|
+
$currentStep.addClass('active');
|
70
|
+
$currentStep.find('span.badge').addClass('badge-info');
|
71
|
+
|
72
|
+
// set display of target element
|
73
|
+
var target = $currentStep.data().target;
|
74
|
+
$('.step-pane').removeClass('active');
|
75
|
+
$(target).addClass('active');
|
76
|
+
|
77
|
+
this.$element.trigger('changed');
|
78
|
+
},
|
79
|
+
|
80
|
+
stepclicked: function (e) {
|
81
|
+
var li = $(e.currentTarget);
|
82
|
+
|
83
|
+
var index = $('.steps li').index(li);
|
84
|
+
this.currentStep = (index + 1);
|
85
|
+
this.setState();
|
86
|
+
},
|
87
|
+
|
88
|
+
previous: function () {
|
89
|
+
var canMovePrev = (this.currentStep > 1);
|
90
|
+
if (canMovePrev) {
|
91
|
+
var e = $.Event('change');
|
92
|
+
this.$element.trigger(e, {step: this.currentStep, direction: 'previous'});
|
93
|
+
if (e.isDefaultPrevented()) return;
|
94
|
+
|
95
|
+
this.currentStep -= 1;
|
96
|
+
this.setState();
|
97
|
+
}
|
98
|
+
},
|
99
|
+
|
100
|
+
next: function () {
|
101
|
+
var canMoveNext = (this.currentStep + 1 <= this.numSteps);
|
102
|
+
var lastStep = (this.currentStep === this.numSteps);
|
103
|
+
|
104
|
+
if (canMoveNext) {
|
105
|
+
var e = $.Event('change');
|
106
|
+
this.$element.trigger(e, {step: this.currentStep, direction: 'next'});
|
107
|
+
|
108
|
+
if (e.isDefaultPrevented()) return;
|
109
|
+
|
110
|
+
this.currentStep += 1;
|
111
|
+
this.setState();
|
112
|
+
}
|
113
|
+
else if (lastStep) {
|
114
|
+
this.$element.trigger('finished');
|
115
|
+
}
|
116
|
+
},
|
117
|
+
|
118
|
+
selectedItem: function (val) {
|
119
|
+
return {
|
120
|
+
step: this.currentStep
|
121
|
+
};
|
122
|
+
}
|
123
|
+
};
|
124
|
+
|
125
|
+
|
126
|
+
// WIZARD PLUGIN DEFINITION
|
127
|
+
|
128
|
+
$.fn.wizard = function (option, value) {
|
129
|
+
var methodReturn;
|
130
|
+
|
131
|
+
var $set = this.each(function () {
|
132
|
+
var $this = $(this);
|
133
|
+
var data = $this.data('wizard');
|
134
|
+
var options = typeof option === 'object' && option;
|
135
|
+
|
136
|
+
if (!data) $this.data('wizard', (data = new Wizard(this, options)));
|
137
|
+
if (typeof option === 'string') methodReturn = data[option](value);
|
138
|
+
});
|
139
|
+
|
140
|
+
return (methodReturn === undefined) ? $set : methodReturn;
|
141
|
+
};
|
142
|
+
|
143
|
+
$.fn.wizard.defaults = {};
|
144
|
+
|
145
|
+
$.fn.wizard.Constructor = Wizard;
|
146
|
+
|
147
|
+
|
148
|
+
// WIZARD DATA-API
|
149
|
+
|
150
|
+
$(function () {
|
151
|
+
$('body').on('mousedown.wizard.data-api', '.wizard', function () {
|
152
|
+
var $this = $(this);
|
153
|
+
if ($this.data('wizard')) return;
|
154
|
+
$this.wizard($this.data());
|
155
|
+
});
|
156
|
+
});
|
153
157
|
|
154
|
-
}(window.jQuery);
|
158
|
+
}(window.jQuery);
|
@@ -95,4 +95,48 @@
|
|
95
95
|
|
96
96
|
}
|
97
97
|
|
98
|
-
}
|
98
|
+
}
|
99
|
+
|
100
|
+
.datagrid-stretch-header {
|
101
|
+
border-bottom: 0;
|
102
|
+
.border-bottom-radius(0);
|
103
|
+
|
104
|
+
margin-bottom: 0;
|
105
|
+
|
106
|
+
thead:last-child tr:last-child > th:first-child,
|
107
|
+
thead:last-child tr:last-child > th:last-child {
|
108
|
+
.border-bottom-radius(0);
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
.datagrid-stretch-wrapper {
|
113
|
+
border: 1px solid @tableBorder;
|
114
|
+
overflow: auto;
|
115
|
+
|
116
|
+
.datagrid {
|
117
|
+
border: none;
|
118
|
+
border-collapse: collapse;
|
119
|
+
.border-radius(0);
|
120
|
+
|
121
|
+
margin-bottom: 0;
|
122
|
+
|
123
|
+
td, th {
|
124
|
+
border-bottom: 1px solid @tableBorder;
|
125
|
+
|
126
|
+
&:first-child {
|
127
|
+
border-left: none;
|
128
|
+
.border-radius(0);
|
129
|
+
}
|
130
|
+
}
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
134
|
+
.datagrid-stretch-footer {
|
135
|
+
border-top: 0;
|
136
|
+
.border-top-radius(0);
|
137
|
+
|
138
|
+
th {
|
139
|
+
border-top: 0;
|
140
|
+
}
|
141
|
+
}
|
142
|
+
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fuelux-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.0
|
5
|
-
prerelease:
|
4
|
+
version: 2.2.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Stephen Baldwin
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 2.
|
69
|
+
version: 2.2.0
|
70
70
|
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +74,7 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 2.
|
77
|
+
version: 2.2.0
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: rails
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -182,9 +182,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
182
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
183
|
none: false
|
184
184
|
requirements:
|
185
|
-
- - ! '
|
185
|
+
- - ! '>='
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
187
|
+
version: '0'
|
188
188
|
requirements: []
|
189
189
|
rubyforge_project: fuelux-rails
|
190
190
|
rubygems_version: 1.8.24
|