fuelux-rails 2.3.2 → 2.4.0.rc1
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/Rakefile +6 -3
- data/lib/fuelux-rails/version.rb +1 -1
- data/lib/generators/fuelux/install_generator.rb +2 -2
- data/lib/tasks/fuelux-rails_tasks.rake +99 -3
- data/vendor/assets/javascripts/fuelux.js +4 -4
- data/vendor/assets/javascripts/fuelux/checkbox.js +22 -3
- data/vendor/assets/javascripts/fuelux/combobox.js +5 -2
- data/vendor/assets/javascripts/fuelux/datagrid.js +61 -12
- data/vendor/assets/javascripts/fuelux/intelligent-dropdown.js +132 -0
- data/vendor/assets/javascripts/fuelux/pillbox.js +64 -12
- data/vendor/assets/javascripts/fuelux/radio.js +11 -1
- data/vendor/assets/javascripts/fuelux/search.js +4 -1
- data/vendor/assets/javascripts/fuelux/select.js +13 -16
- data/vendor/assets/javascripts/fuelux/spinner.js +20 -6
- data/vendor/assets/javascripts/fuelux/tree.js +98 -27
- data/vendor/assets/javascripts/fuelux/util.js +3 -1
- data/vendor/assets/javascripts/fuelux/wizard.js +69 -13
- data/vendor/toolkit/fuelux.less +6 -4
- data/vendor/toolkit/fuelux/checkbox.less +14 -2
- data/vendor/toolkit/fuelux/combobox.less +1 -1
- data/vendor/toolkit/fuelux/datagrid.less +5 -0
- data/vendor/toolkit/fuelux/intelligent-dropdown.less +5 -0
- data/vendor/toolkit/fuelux/pillbox.less +1 -1
- data/vendor/toolkit/fuelux/radio.less +4 -2
- data/vendor/toolkit/fuelux/search.less +1 -1
- data/vendor/toolkit/fuelux/select.less +7 -7
- data/vendor/toolkit/fuelux/spinner.less +1 -1
- data/vendor/toolkit/fuelux/tree.less +5 -3
- data/vendor/toolkit/fuelux/wizard.less +21 -34
- metadata +29 -13
@@ -8,6 +8,8 @@
|
|
8
8
|
|
9
9
|
!function ($) {
|
10
10
|
|
11
|
+
|
12
|
+
|
11
13
|
// PILLBOX CONSTRUCTOR AND PROTOTYPE
|
12
14
|
|
13
15
|
var Pillbox = function (element, options) {
|
@@ -17,25 +19,76 @@
|
|
17
19
|
};
|
18
20
|
|
19
21
|
Pillbox.prototype = {
|
20
|
-
constructor: Pillbox,
|
22
|
+
constructor : Pillbox,
|
21
23
|
|
22
24
|
items: function() {
|
23
25
|
return this.$element.find('li').map(function() {
|
24
26
|
var $this = $(this);
|
25
|
-
return $.extend({
|
27
|
+
return $.extend({
|
28
|
+
text : $this.text()
|
29
|
+
}, $this.data());
|
26
30
|
}).get();
|
27
31
|
},
|
28
32
|
|
29
|
-
itemclicked: function
|
30
|
-
|
33
|
+
itemclicked: function(e) {
|
34
|
+
|
35
|
+
var $li = $(e.currentTarget);
|
36
|
+
var data = $.extend({
|
37
|
+
text : $li.html()
|
38
|
+
}, $li.data());
|
39
|
+
|
40
|
+
$li.remove();
|
31
41
|
e.preventDefault();
|
42
|
+
|
43
|
+
this.$element.trigger('removed', data);
|
44
|
+
},
|
45
|
+
|
46
|
+
itemCount: function() {
|
47
|
+
|
48
|
+
return this.$element.find('li').length;
|
49
|
+
},
|
50
|
+
|
51
|
+
addItem: function(text, value) {
|
52
|
+
|
53
|
+
value = value || text;
|
54
|
+
|
55
|
+
//<li data-value="foo">Item One</li>
|
56
|
+
|
57
|
+
var $li = $('<li data-value="' + value + '">' + text + '</li>');
|
58
|
+
|
59
|
+
this.$element.find('ul').append($li);
|
60
|
+
|
61
|
+
return $li;
|
62
|
+
},
|
63
|
+
|
64
|
+
removeBySelector: function(selector) {
|
65
|
+
|
66
|
+
this.$element.find('ul').find(selector).remove();
|
67
|
+
},
|
68
|
+
|
69
|
+
removeByValue: function(value) {
|
70
|
+
|
71
|
+
var selector = 'li[data-value="' + value + '"]';
|
72
|
+
|
73
|
+
this.removeBySelector(selector);
|
74
|
+
},
|
75
|
+
|
76
|
+
removeByText: function(text) {
|
77
|
+
|
78
|
+
var selector = 'li:contains("' + text + '")';
|
79
|
+
|
80
|
+
this.removeBySelector(selector);
|
81
|
+
},
|
82
|
+
|
83
|
+
clear: function() {
|
84
|
+
|
85
|
+
this.$element.find('ul').empty();
|
32
86
|
}
|
33
87
|
};
|
34
88
|
|
35
|
-
|
36
89
|
// PILLBOX PLUGIN DEFINITION
|
37
90
|
|
38
|
-
$.fn.pillbox = function (option) {
|
91
|
+
$.fn.pillbox = function (option, value1, value2) {
|
39
92
|
var methodReturn;
|
40
93
|
|
41
94
|
var $set = this.each(function () {
|
@@ -43,8 +96,8 @@
|
|
43
96
|
var data = $this.data('pillbox');
|
44
97
|
var options = typeof option === 'object' && option;
|
45
98
|
|
46
|
-
if (!data) $this.data('pillbox', (data = new Pillbox(this, options)));
|
47
|
-
if (typeof option === 'string') methodReturn = data[option]();
|
99
|
+
if (!data) $this.data('pillbox', ( data = new Pillbox(this, options)));
|
100
|
+
if ( typeof option === 'string') methodReturn = data[option](value1, value2);
|
48
101
|
});
|
49
102
|
|
50
103
|
return (methodReturn === undefined) ? $set : methodReturn;
|
@@ -54,15 +107,14 @@
|
|
54
107
|
|
55
108
|
$.fn.pillbox.Constructor = Pillbox;
|
56
109
|
|
57
|
-
|
58
110
|
// PILLBOX DATA-API
|
59
111
|
|
60
112
|
$(function () {
|
61
|
-
$('body').on('mousedown.pillbox.data-api', '.pillbox', function (
|
113
|
+
$('body').on('mousedown.pillbox.data-api', '.pillbox', function () {
|
62
114
|
var $this = $(this);
|
63
115
|
if ($this.data('pillbox')) return;
|
64
116
|
$this.pillbox($this.data());
|
65
117
|
});
|
66
118
|
});
|
67
|
-
|
68
|
-
|
119
|
+
}(window.jQuery);
|
120
|
+
|
@@ -8,6 +8,9 @@
|
|
8
8
|
|
9
9
|
!function ($) {
|
10
10
|
|
11
|
+
|
12
|
+
|
13
|
+
|
11
14
|
// RADIO CONSTRUCTOR AND PROTOTYPE
|
12
15
|
|
13
16
|
var Radio = function (element, options) {
|
@@ -31,9 +34,16 @@
|
|
31
34
|
|
32
35
|
constructor: Radio,
|
33
36
|
|
34
|
-
setState: function ($radio
|
37
|
+
setState: function ($radio) {
|
38
|
+
$radio = $radio || this.$radio;
|
39
|
+
|
35
40
|
var checked = $radio.is(':checked');
|
36
41
|
var disabled = $radio.is(':disabled');
|
42
|
+
|
43
|
+
// reset classes
|
44
|
+
this.$icon.removeClass('checked').removeClass('disabled');
|
45
|
+
|
46
|
+
this.$icon.removeClass('checked disabled');
|
37
47
|
|
38
48
|
// set state of radio
|
39
49
|
if (checked === true) {
|
@@ -8,6 +8,9 @@
|
|
8
8
|
|
9
9
|
!function ($) {
|
10
10
|
|
11
|
+
|
12
|
+
|
13
|
+
|
11
14
|
// SELECT CONSTRUCTOR AND PROTOTYPE
|
12
15
|
|
13
16
|
var Select = function (element, options) {
|
@@ -42,29 +45,23 @@
|
|
42
45
|
},
|
43
46
|
|
44
47
|
resize: function() {
|
45
|
-
var el = $('#selectTextSize')[0];
|
46
|
-
|
47
|
-
// create element if it doesn't exist
|
48
|
-
// used to calculate the length of the longest string
|
49
|
-
if(!el) {
|
50
|
-
$('<div/>').attr({id:'selectTextSize'}).appendTo('body');
|
51
|
-
}
|
52
|
-
|
53
|
-
var width = 0;
|
54
48
|
var newWidth = 0;
|
49
|
+
var sizer = $('<div/>').addClass('select-sizer');
|
50
|
+
var width = 0;
|
51
|
+
|
52
|
+
$('body').append(sizer);
|
55
53
|
|
56
54
|
// iterate through each item to find longest string
|
57
55
|
this.$element.find('a').each(function () {
|
58
|
-
|
59
|
-
|
60
|
-
var $txtSize = $('#selectTextSize');
|
61
|
-
$txtSize.text(txt);
|
62
|
-
newWidth = $txtSize.outerWidth();
|
56
|
+
sizer.text($(this).text());
|
57
|
+
newWidth = sizer.outerWidth();
|
63
58
|
if(newWidth > width) {
|
64
59
|
width = newWidth;
|
65
60
|
}
|
66
61
|
});
|
67
62
|
|
63
|
+
sizer.remove();
|
64
|
+
|
68
65
|
this.$label.width(width);
|
69
66
|
},
|
70
67
|
|
@@ -79,7 +76,7 @@
|
|
79
76
|
},
|
80
77
|
|
81
78
|
selectByValue: function(value) {
|
82
|
-
var selector = 'li[data-value=' + value + ']';
|
79
|
+
var selector = 'li[data-value="' + value + '"]';
|
83
80
|
this.selectBySelector(selector);
|
84
81
|
},
|
85
82
|
|
@@ -156,7 +153,7 @@
|
|
156
153
|
});
|
157
154
|
});
|
158
155
|
|
159
|
-
$('body').on('mousedown.select.data-api', '.select', function (
|
156
|
+
$('body').on('mousedown.select.data-api', '.select', function () {
|
160
157
|
var $this = $(this);
|
161
158
|
if ($this.data('select')) return;
|
162
159
|
$this.select($this.data());
|
@@ -6,7 +6,10 @@
|
|
6
6
|
* Licensed under the MIT license.
|
7
7
|
*/
|
8
8
|
|
9
|
-
!function ($) {
|
9
|
+
!function ($) {
|
10
|
+
|
11
|
+
|
12
|
+
|
10
13
|
|
11
14
|
// SPINNER CONSTRUCTOR AND PROTOTYPE
|
12
15
|
|
@@ -52,8 +55,15 @@
|
|
52
55
|
constructor: Spinner,
|
53
56
|
|
54
57
|
render: function () {
|
55
|
-
this.$input.val(
|
56
|
-
|
58
|
+
var inputValue = this.$input.val();
|
59
|
+
|
60
|
+
if (inputValue) {
|
61
|
+
this.value(inputValue);
|
62
|
+
} else {
|
63
|
+
this.$input.val(this.options.value);
|
64
|
+
}
|
65
|
+
|
66
|
+
this.$input.attr('maxlength', (this.options.max + '').split('').length);
|
57
67
|
},
|
58
68
|
|
59
69
|
change: function () {
|
@@ -127,11 +137,15 @@
|
|
127
137
|
} else {
|
128
138
|
this.value(newVal);
|
129
139
|
}
|
140
|
+
} else if (this.options.cycle) {
|
141
|
+
var cycleVal = dir ? this.options.min : this.options.max;
|
142
|
+
this.value(cycleVal);
|
130
143
|
}
|
131
144
|
},
|
132
145
|
|
133
146
|
value: function (value) {
|
134
|
-
if (
|
147
|
+
if (!isNaN(parseFloat(value)) && isFinite(value)) {
|
148
|
+
value = parseFloat(value);
|
135
149
|
this.options.value = value;
|
136
150
|
this.$input.val(value);
|
137
151
|
return this;
|
@@ -187,11 +201,11 @@
|
|
187
201
|
// SPINNER DATA-API
|
188
202
|
|
189
203
|
$(function () {
|
190
|
-
$('body').on('mousedown.spinner.data-api', '.spinner', function (
|
204
|
+
$('body').on('mousedown.spinner.data-api', '.spinner', function () {
|
191
205
|
var $this = $(this);
|
192
206
|
if ($this.data('spinner')) return;
|
193
207
|
$this.spinner($this.data());
|
194
208
|
});
|
195
209
|
});
|
196
210
|
|
197
|
-
}(window.jQuery);
|
211
|
+
}(window.jQuery);
|
@@ -6,7 +6,10 @@
|
|
6
6
|
* Licensed under the MIT license.
|
7
7
|
*/
|
8
8
|
|
9
|
-
!function ($) {
|
9
|
+
!function ($) {
|
10
|
+
|
11
|
+
|
12
|
+
|
10
13
|
|
11
14
|
// TREE CONSTRUCTOR AND PROTOTYPE
|
12
15
|
|
@@ -29,7 +32,8 @@
|
|
29
32
|
|
30
33
|
populate: function ($el) {
|
31
34
|
var self = this;
|
32
|
-
var
|
35
|
+
var $parent = $el.parent();
|
36
|
+
var loader = $parent.find('.tree-loader:eq(0)');
|
33
37
|
|
34
38
|
loader.show();
|
35
39
|
this.options.dataSource.data($el.data(), function (items) {
|
@@ -49,14 +53,47 @@
|
|
49
53
|
$entity.data(value);
|
50
54
|
}
|
51
55
|
|
56
|
+
// Decorate $entity with data making the element
|
57
|
+
// easily accessable with libraries like jQuery.
|
58
|
+
//
|
59
|
+
// Values are contained within the object returned
|
60
|
+
// for folders and items as dataAttributes:
|
61
|
+
//
|
62
|
+
// {
|
63
|
+
// name: "An Item",
|
64
|
+
// type: 'item',
|
65
|
+
// dataAttributes = {
|
66
|
+
// 'classes': 'required-item red-text',
|
67
|
+
// 'data-parent': parentId,
|
68
|
+
// 'guid': guid
|
69
|
+
// }
|
70
|
+
// };
|
71
|
+
|
72
|
+
var dataAttributes = value.dataAttributes || [];
|
73
|
+
$.each(dataAttributes, function(key, value) {
|
74
|
+
switch (key) {
|
75
|
+
case 'class':
|
76
|
+
case 'classes':
|
77
|
+
case 'className':
|
78
|
+
$entity.addClass(value);
|
79
|
+
break;
|
80
|
+
|
81
|
+
// id, style, data-*
|
82
|
+
default:
|
83
|
+
$entity.attr(key, value);
|
84
|
+
break;
|
85
|
+
}
|
86
|
+
});
|
87
|
+
|
52
88
|
if($el.hasClass('tree-folder-header')) {
|
53
|
-
$
|
89
|
+
$parent.find('.tree-folder-content:eq(0)').append($entity);
|
54
90
|
} else {
|
55
91
|
$el.append($entity);
|
56
92
|
}
|
57
93
|
});
|
58
94
|
|
59
|
-
|
95
|
+
// return newly populated folder
|
96
|
+
self.$element.trigger('loaded', $parent);
|
60
97
|
});
|
61
98
|
},
|
62
99
|
|
@@ -78,7 +115,9 @@
|
|
78
115
|
data.push($el.data());
|
79
116
|
}
|
80
117
|
|
118
|
+
var eventType = 'selected';
|
81
119
|
if($el.hasClass('tree-selected')) {
|
120
|
+
eventType = 'unselected';
|
82
121
|
$el.removeClass('tree-selected');
|
83
122
|
$el.find('i').removeClass('icon-ok').addClass('tree-dot');
|
84
123
|
} else {
|
@@ -93,37 +132,47 @@
|
|
93
132
|
this.$element.trigger('selected', {info: data});
|
94
133
|
}
|
95
134
|
|
135
|
+
// Return new list of selected items, the item
|
136
|
+
// clicked, and the type of event:
|
137
|
+
$el.trigger('updated', {
|
138
|
+
info: data,
|
139
|
+
item: $el,
|
140
|
+
eventType: eventType
|
141
|
+
});
|
96
142
|
},
|
97
143
|
|
98
144
|
selectFolder: function (el) {
|
99
145
|
var $el = $(el);
|
100
|
-
var $
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
146
|
+
var $parent = $el.parent();
|
147
|
+
var $treeFolderContent = $parent.find('.tree-folder-content');
|
148
|
+
var $treeFolderContentFirstChild = $treeFolderContent.eq(0);
|
149
|
+
|
150
|
+
var eventType, classToTarget, classToAdd;
|
151
|
+
if ($el.find('.icon-folder-close').length) {
|
152
|
+
eventType = 'opened';
|
153
|
+
classToTarget = '.icon-folder-close';
|
154
|
+
classToAdd = 'icon-folder-open';
|
155
|
+
|
156
|
+
$treeFolderContentFirstChild.show();
|
157
|
+
if (!$treeFolderContent.children().length) {
|
158
|
+
this.populate($el);
|
107
159
|
}
|
108
|
-
|
109
|
-
$par.find('.icon-folder-close:eq(0)')
|
110
|
-
.removeClass('icon-folder-close')
|
111
|
-
.addClass('icon-folder-open');
|
112
|
-
|
113
|
-
this.$element.trigger('opened', $el.data());
|
114
160
|
} else {
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
161
|
+
eventType = 'closed';
|
162
|
+
classToTarget = '.icon-folder-open';
|
163
|
+
classToAdd = 'icon-folder-close';
|
164
|
+
|
165
|
+
$treeFolderContentFirstChild.hide();
|
166
|
+
if (!this.options.cacheItems) {
|
167
|
+
$treeFolderContentFirstChild.empty();
|
119
168
|
}
|
169
|
+
}
|
120
170
|
|
121
|
-
|
122
|
-
|
123
|
-
|
171
|
+
$parent.find(classToTarget).eq(0)
|
172
|
+
.removeClass('icon-folder-close icon-folder-open')
|
173
|
+
.addClass(classToAdd);
|
124
174
|
|
125
|
-
|
126
|
-
}
|
175
|
+
this.$element.trigger(eventType, $el.data());
|
127
176
|
},
|
128
177
|
|
129
178
|
selectedItems: function () {
|
@@ -134,6 +183,28 @@
|
|
134
183
|
data.push($(value).data());
|
135
184
|
});
|
136
185
|
return data;
|
186
|
+
},
|
187
|
+
|
188
|
+
// collapses open folders
|
189
|
+
collapse: function () {
|
190
|
+
var cacheItems = this.options.cacheItems;
|
191
|
+
|
192
|
+
// find open folders
|
193
|
+
this.$element.find('.icon-folder-open').each(function () {
|
194
|
+
// update icon class
|
195
|
+
var $this = $(this)
|
196
|
+
.removeClass('icon-folder-close icon-folder-open')
|
197
|
+
.addClass('icon-folder-close');
|
198
|
+
|
199
|
+
// "close" or empty folder contents
|
200
|
+
var $parent = $this.parent().parent();
|
201
|
+
var $folder = $parent.children('.tree-folder-content');
|
202
|
+
|
203
|
+
$folder.hide();
|
204
|
+
if (!cacheItems) {
|
205
|
+
$folder.empty();
|
206
|
+
}
|
207
|
+
});
|
137
208
|
}
|
138
209
|
};
|
139
210
|
|
@@ -163,4 +234,4 @@
|
|
163
234
|
|
164
235
|
$.fn.tree.Constructor = Tree;
|
165
236
|
|
166
|
-
}(window.jQuery);
|
237
|
+
}(window.jQuery);
|