uikit-rails 0.0.1 → 0.0.2
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.
- data/README.rb +1 -0
- data/lib/uikit-rails/engine.rb +6 -0
- data/lib/uikit-rails/version.rb +1 -1
- data/vendor/assets/javascripts/ui.card.js +115 -0
- data/vendor/assets/javascripts/ui.color-picker.js +351 -0
- data/vendor/assets/javascripts/ui.confirmation.js +133 -0
- data/vendor/assets/javascripts/ui.dialog.js +252 -0
- data/vendor/assets/javascripts/ui.emitter.js +99 -0
- data/vendor/assets/javascripts/ui.js +1641 -0
- data/vendor/assets/javascripts/ui.menu.js +238 -0
- data/vendor/assets/javascripts/ui.notification.js +240 -0
- data/vendor/assets/javascripts/ui.overlay.js +79 -0
- data/vendor/assets/javascripts/ui.split-button.js +108 -0
- data/vendor/assets/stylesheets/ui.card.css +55 -0
- data/vendor/assets/stylesheets/ui.color-picker.css +6 -0
- data/vendor/assets/stylesheets/ui.confirmation.css +7 -0
- data/vendor/assets/stylesheets/ui.css +337 -0
- data/vendor/assets/stylesheets/ui.dialog.css +92 -0
- data/vendor/assets/stylesheets/ui.menu.css +32 -0
- data/vendor/assets/stylesheets/ui.notification.css +107 -0
- data/vendor/assets/stylesheets/ui.overlay.css +16 -0
- data/vendor/assets/stylesheets/ui.split-button.css +27 -0
- metadata +22 -1
@@ -0,0 +1,133 @@
|
|
1
|
+
|
2
|
+
/**
|
3
|
+
* Expose `Confirmation`.
|
4
|
+
*/
|
5
|
+
|
6
|
+
exports.Confirmation = Confirmation;
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Return a new `Confirmation` dialog with the given
|
10
|
+
* `title` and `msg`.
|
11
|
+
*
|
12
|
+
* @param {String} title or msg
|
13
|
+
* @param {String} msg
|
14
|
+
* @return {Dialog}
|
15
|
+
* @api public
|
16
|
+
*/
|
17
|
+
|
18
|
+
exports.confirm = function(title, msg){
|
19
|
+
switch (arguments.length) {
|
20
|
+
case 2:
|
21
|
+
return new Confirmation({ title: title, message: msg });
|
22
|
+
case 1:
|
23
|
+
return new Confirmation({ message: title });
|
24
|
+
}
|
25
|
+
};
|
26
|
+
|
27
|
+
/**
|
28
|
+
* Initialize a new `Confirmation` dialog.
|
29
|
+
*
|
30
|
+
* Options:
|
31
|
+
*
|
32
|
+
* - `title` dialog title
|
33
|
+
* - `message` a message to display
|
34
|
+
*
|
35
|
+
* Emits:
|
36
|
+
*
|
37
|
+
* - `cancel` the user pressed cancel or closed the dialog
|
38
|
+
* - `ok` the user clicked ok
|
39
|
+
* - `show` when visible
|
40
|
+
* - `hide` when hidden
|
41
|
+
*
|
42
|
+
* @param {Object} options
|
43
|
+
* @api public
|
44
|
+
*/
|
45
|
+
|
46
|
+
function Confirmation(options) {
|
47
|
+
ui.Dialog.call(this, options);
|
48
|
+
};
|
49
|
+
|
50
|
+
/**
|
51
|
+
* Inherit from `Dialog.prototype`.
|
52
|
+
*/
|
53
|
+
|
54
|
+
Confirmation.prototype = new ui.Dialog;
|
55
|
+
|
56
|
+
/**
|
57
|
+
* Change "cancel" button `text`.
|
58
|
+
*
|
59
|
+
* @param {String} text
|
60
|
+
* @return {Confirmation}
|
61
|
+
* @api public
|
62
|
+
*/
|
63
|
+
|
64
|
+
Confirmation.prototype.cancel = function(text){
|
65
|
+
this.el.find('.cancel').text(text);
|
66
|
+
return this;
|
67
|
+
};
|
68
|
+
|
69
|
+
/**
|
70
|
+
* Change "ok" button `text`.
|
71
|
+
*
|
72
|
+
* @param {String} text
|
73
|
+
* @return {Confirmation}
|
74
|
+
* @api public
|
75
|
+
*/
|
76
|
+
|
77
|
+
Confirmation.prototype.ok = function(text){
|
78
|
+
this.el.find('.ok').text(text);
|
79
|
+
return this;
|
80
|
+
};
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Show the confirmation dialog and invoke `fn(ok)`.
|
84
|
+
*
|
85
|
+
* @param {Function} fn
|
86
|
+
* @return {Confirmation} for chaining
|
87
|
+
* @api public
|
88
|
+
*/
|
89
|
+
|
90
|
+
Confirmation.prototype.show = function(fn){
|
91
|
+
ui.Dialog.prototype.show.call(this);
|
92
|
+
this.el.find('.ok').focus();
|
93
|
+
this.callback = fn || function(){};
|
94
|
+
return this;
|
95
|
+
};
|
96
|
+
|
97
|
+
/**
|
98
|
+
* Render with the given `options`.
|
99
|
+
*
|
100
|
+
* Emits "cancel" event.
|
101
|
+
* Emits "ok" event.
|
102
|
+
*
|
103
|
+
* @param {Object} options
|
104
|
+
* @api public
|
105
|
+
*/
|
106
|
+
|
107
|
+
Confirmation.prototype.render = function(options){
|
108
|
+
ui.Dialog.prototype.render.call(this, options);
|
109
|
+
var self = this
|
110
|
+
, actions = $(html);
|
111
|
+
|
112
|
+
this.el.addClass('confirmation');
|
113
|
+
this.el.append(actions);
|
114
|
+
|
115
|
+
this.on('close', function(){
|
116
|
+
self.emit('cancel');
|
117
|
+
self.callback(false);
|
118
|
+
});
|
119
|
+
|
120
|
+
actions.find('.cancel').click(function(e){
|
121
|
+
e.preventDefault();
|
122
|
+
self.emit('cancel');
|
123
|
+
self.callback(false);
|
124
|
+
self.hide();
|
125
|
+
});
|
126
|
+
|
127
|
+
actions.find('.ok').click(function(e){
|
128
|
+
e.preventDefault();
|
129
|
+
self.emit('ok');
|
130
|
+
self.callback(true);
|
131
|
+
self.hide();
|
132
|
+
});
|
133
|
+
};
|
@@ -0,0 +1,252 @@
|
|
1
|
+
|
2
|
+
/**
|
3
|
+
* Active dialog.
|
4
|
+
*/
|
5
|
+
|
6
|
+
var active;
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Expose `Dialog`.
|
10
|
+
*/
|
11
|
+
|
12
|
+
exports.Dialog = Dialog;
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Return a new `Dialog` with the given
|
16
|
+
* (optional) `title` and `msg`.
|
17
|
+
*
|
18
|
+
* @param {String} title or msg
|
19
|
+
* @param {String} msg
|
20
|
+
* @return {Dialog}
|
21
|
+
* @api public
|
22
|
+
*/
|
23
|
+
|
24
|
+
exports.dialog = function(title, msg){
|
25
|
+
switch (arguments.length) {
|
26
|
+
case 2:
|
27
|
+
return new Dialog({ title: title, message: msg });
|
28
|
+
case 1:
|
29
|
+
return new Dialog({ message: title });
|
30
|
+
}
|
31
|
+
};
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Initialize a new `Dialog`.
|
35
|
+
*
|
36
|
+
* Options:
|
37
|
+
*
|
38
|
+
* - `title` dialog title
|
39
|
+
* - `message` a message to display
|
40
|
+
*
|
41
|
+
* Emits:
|
42
|
+
*
|
43
|
+
* - `show` when visible
|
44
|
+
* - `hide` when hidden
|
45
|
+
*
|
46
|
+
* @param {Object} options
|
47
|
+
* @api public
|
48
|
+
*/
|
49
|
+
|
50
|
+
function Dialog(options) {
|
51
|
+
ui.Emitter.call(this);
|
52
|
+
options = options || {};
|
53
|
+
this.template = html;
|
54
|
+
this.el = $(this.template);
|
55
|
+
this.render(options);
|
56
|
+
if (active && !active.hiding) active.hide();
|
57
|
+
if (Dialog.effect) this.effect(Dialog.effect);
|
58
|
+
active = this;
|
59
|
+
};
|
60
|
+
|
61
|
+
/**
|
62
|
+
* Inherit from `Emitter.prototype`.
|
63
|
+
*/
|
64
|
+
|
65
|
+
Dialog.prototype = new ui.Emitter;
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Render with the given `options`.
|
69
|
+
*
|
70
|
+
* @param {Object} options
|
71
|
+
* @api public
|
72
|
+
*/
|
73
|
+
|
74
|
+
Dialog.prototype.render = function(options){
|
75
|
+
var el = this.el
|
76
|
+
, title = options.title
|
77
|
+
, msg = options.message
|
78
|
+
, self = this;
|
79
|
+
|
80
|
+
el.find('.close').click(function(){
|
81
|
+
self.emit('close');
|
82
|
+
self.hide();
|
83
|
+
return false;
|
84
|
+
});
|
85
|
+
|
86
|
+
el.find('h1').text(title);
|
87
|
+
if (!title) el.find('h1').remove();
|
88
|
+
|
89
|
+
// message
|
90
|
+
if ('string' == typeof msg) {
|
91
|
+
el.find('p').text(msg);
|
92
|
+
} else if (msg) {
|
93
|
+
el.find('p').replaceWith(msg.el || msg);
|
94
|
+
}
|
95
|
+
|
96
|
+
setTimeout(function(){
|
97
|
+
el.removeClass('hide');
|
98
|
+
}, 0);
|
99
|
+
};
|
100
|
+
|
101
|
+
/**
|
102
|
+
* Enable the dialog close link.
|
103
|
+
*
|
104
|
+
* @return {Dialog} for chaining
|
105
|
+
* @api public
|
106
|
+
*/
|
107
|
+
|
108
|
+
Dialog.prototype.closable = function(){
|
109
|
+
this.el.addClass('closable');
|
110
|
+
return this;
|
111
|
+
};
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Set the effect to `type`.
|
115
|
+
*
|
116
|
+
* @param {String} type
|
117
|
+
* @return {Dialog} for chaining
|
118
|
+
* @api public
|
119
|
+
*/
|
120
|
+
|
121
|
+
Dialog.prototype.effect = function(type){
|
122
|
+
this._effect = type;
|
123
|
+
this.el.addClass(type);
|
124
|
+
return this;
|
125
|
+
};
|
126
|
+
|
127
|
+
/**
|
128
|
+
* Make it modal!
|
129
|
+
*
|
130
|
+
* @return {Dialog} for chaining
|
131
|
+
* @api public
|
132
|
+
*/
|
133
|
+
|
134
|
+
Dialog.prototype.modal = function(){
|
135
|
+
this._overlay = ui.overlay();
|
136
|
+
return this;
|
137
|
+
};
|
138
|
+
|
139
|
+
/**
|
140
|
+
* Add an overlay.
|
141
|
+
*
|
142
|
+
* @return {Dialog} for chaining
|
143
|
+
* @api public
|
144
|
+
*/
|
145
|
+
|
146
|
+
Dialog.prototype.overlay = function(){
|
147
|
+
var self = this;
|
148
|
+
this._overlay = ui
|
149
|
+
.overlay({ closable: true })
|
150
|
+
.on('hide', function(){
|
151
|
+
self.closedOverlay = true;
|
152
|
+
self.hide();
|
153
|
+
});
|
154
|
+
return this;
|
155
|
+
};
|
156
|
+
|
157
|
+
/**
|
158
|
+
* Close the dialog when the escape key is pressed.
|
159
|
+
*
|
160
|
+
* @api private
|
161
|
+
*/
|
162
|
+
|
163
|
+
Dialog.prototype.escapable = function(){
|
164
|
+
var self = this;
|
165
|
+
$(document).bind('keydown.dialog', function(e){
|
166
|
+
if (27 != e.which) return;
|
167
|
+
$(this).unbind('keydown.dialog');
|
168
|
+
self.hide();
|
169
|
+
});
|
170
|
+
};
|
171
|
+
|
172
|
+
/**
|
173
|
+
* Show the dialog.
|
174
|
+
*
|
175
|
+
* Emits "show" event.
|
176
|
+
*
|
177
|
+
* @return {Dialog} for chaining
|
178
|
+
* @api public
|
179
|
+
*/
|
180
|
+
|
181
|
+
Dialog.prototype.show = function(){
|
182
|
+
var overlay = this._overlay;
|
183
|
+
|
184
|
+
this.emit('show');
|
185
|
+
|
186
|
+
if (overlay) {
|
187
|
+
overlay.show();
|
188
|
+
this.el.addClass('modal');
|
189
|
+
}
|
190
|
+
|
191
|
+
// escape
|
192
|
+
if (!overlay || overlay.closable) this.escapable();
|
193
|
+
|
194
|
+
this.el.appendTo('body');
|
195
|
+
this.el.css({ marginLeft: -(this.el.width() / 2) + 'px' });
|
196
|
+
this.emit('show');
|
197
|
+
return this;
|
198
|
+
};
|
199
|
+
|
200
|
+
/**
|
201
|
+
* Hide the dialog with optional delay of `ms`,
|
202
|
+
* otherwise the dialog is removed immediately.
|
203
|
+
*
|
204
|
+
* Emits "hide" event.
|
205
|
+
*
|
206
|
+
* @return {Number} ms
|
207
|
+
* @return {Dialog} for chaining
|
208
|
+
* @api public
|
209
|
+
*/
|
210
|
+
|
211
|
+
Dialog.prototype.hide = function(ms){
|
212
|
+
var self = this;
|
213
|
+
|
214
|
+
// prevent thrashing
|
215
|
+
this.hiding = true;
|
216
|
+
|
217
|
+
// duration
|
218
|
+
if (ms) {
|
219
|
+
setTimeout(function(){
|
220
|
+
self.hide();
|
221
|
+
}, ms);
|
222
|
+
return this;
|
223
|
+
}
|
224
|
+
|
225
|
+
// hide / remove
|
226
|
+
this.el.addClass('hide');
|
227
|
+
if (this._effect) {
|
228
|
+
setTimeout(function(){
|
229
|
+
self.remove();
|
230
|
+
}, 500);
|
231
|
+
} else {
|
232
|
+
self.remove();
|
233
|
+
}
|
234
|
+
|
235
|
+
// modal
|
236
|
+
if (this._overlay && !self.closedOverlay) this._overlay.hide();
|
237
|
+
|
238
|
+
return this;
|
239
|
+
};
|
240
|
+
|
241
|
+
/**
|
242
|
+
* Hide the dialog without potential animation.
|
243
|
+
*
|
244
|
+
* @return {Dialog} for chaining
|
245
|
+
* @api public
|
246
|
+
*/
|
247
|
+
|
248
|
+
Dialog.prototype.remove = function(){
|
249
|
+
this.emit('hide');
|
250
|
+
this.el.remove();
|
251
|
+
return this;
|
252
|
+
};
|
@@ -0,0 +1,99 @@
|
|
1
|
+
/**
|
2
|
+
* Expose `Emitter`.
|
3
|
+
*/
|
4
|
+
|
5
|
+
exports.Emitter = Emitter;
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Initialize a new `Emitter`.
|
9
|
+
*
|
10
|
+
* @api public
|
11
|
+
*/
|
12
|
+
|
13
|
+
function Emitter() {
|
14
|
+
this.callbacks = {};
|
15
|
+
};
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Listen on the given `event` with `fn`.
|
19
|
+
*
|
20
|
+
* @param {String} event
|
21
|
+
* @param {Function} fn
|
22
|
+
* @return {Emitter}
|
23
|
+
* @api public
|
24
|
+
*/
|
25
|
+
|
26
|
+
Emitter.prototype.on = function(event, fn){
|
27
|
+
(this.callbacks[event] = this.callbacks[event] || [])
|
28
|
+
.push(fn);
|
29
|
+
return this;
|
30
|
+
};
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Adds an `event` listener that will be invoked a single
|
34
|
+
* time then automatically removed.
|
35
|
+
*
|
36
|
+
* @param {String} event
|
37
|
+
* @param {Function} fn
|
38
|
+
* @return {Emitter}
|
39
|
+
* @api public
|
40
|
+
*/
|
41
|
+
|
42
|
+
Emitter.prototype.once = function(event, fn){
|
43
|
+
var self = this;
|
44
|
+
|
45
|
+
function on() {
|
46
|
+
self.off(event, on);
|
47
|
+
fn.apply(this, arguments);
|
48
|
+
}
|
49
|
+
|
50
|
+
this.on(event, on);
|
51
|
+
return this;
|
52
|
+
};
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Remove the given callback for `event` or all
|
56
|
+
* registered callbacks.
|
57
|
+
*
|
58
|
+
* @param {String} event
|
59
|
+
* @param {Function} fn
|
60
|
+
* @return {Emitter}
|
61
|
+
* @api public
|
62
|
+
*/
|
63
|
+
|
64
|
+
Emitter.prototype.off = function(event, fn){
|
65
|
+
var callbacks = this.callbacks[event];
|
66
|
+
if (!callbacks) return this;
|
67
|
+
|
68
|
+
// remove all handlers
|
69
|
+
if (1 == arguments.length) {
|
70
|
+
delete this.callbacks[event];
|
71
|
+
return this;
|
72
|
+
}
|
73
|
+
|
74
|
+
// remove specific handler
|
75
|
+
var i = callbacks.indexOf(fn);
|
76
|
+
callbacks.splice(i, 1);
|
77
|
+
return this;
|
78
|
+
};
|
79
|
+
|
80
|
+
/**
|
81
|
+
* Emit `event` with the given args.
|
82
|
+
*
|
83
|
+
* @param {String} event
|
84
|
+
* @param {Mixed} ...
|
85
|
+
* @return {Emitter}
|
86
|
+
*/
|
87
|
+
|
88
|
+
Emitter.prototype.emit = function(event){
|
89
|
+
var args = [].slice.call(arguments, 1)
|
90
|
+
, callbacks = this.callbacks[event];
|
91
|
+
|
92
|
+
if (callbacks) {
|
93
|
+
for (var i = 0, len = callbacks.length; i < len; ++i) {
|
94
|
+
callbacks[i].apply(this, args);
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
return this;
|
99
|
+
};
|