mutiny-rails 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
data/lib/mutiny/rails/version.rb
CHANGED
@@ -1,63 +1,126 @@
|
|
1
|
-
/*! Mutiny v0.
|
2
|
-
(function(window,
|
1
|
+
/*! Mutiny v0.3.0 - http://mutinyjs.com/ */
|
2
|
+
(function(window, undefined) {
|
3
3
|
$(function(){
|
4
|
-
Mutiny.
|
4
|
+
if(Mutiny.options.initOnReady) {
|
5
|
+
Mutiny.init();
|
6
|
+
}
|
5
7
|
});
|
6
8
|
|
7
9
|
var Mutiny = window.Mutiny = {
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
options: {
|
11
|
+
initOnReady: true
|
12
|
+
},
|
11
13
|
|
12
|
-
|
13
|
-
if(Mutiny[widget] === undefined) {
|
14
|
-
throw '"' + widget + '" not found';
|
15
|
-
}
|
14
|
+
widgets: {},
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
options[Mutiny[widget].string_arg] = instance_options;
|
20
|
-
} else {
|
21
|
-
$.extend(options, instance_options);
|
22
|
-
}
|
23
|
-
Mutiny[widget].init($instigator, options);
|
24
|
-
};
|
16
|
+
init: function($es, namespace) {
|
17
|
+
namespace = namespace || 'mutiny';
|
25
18
|
|
26
|
-
|
19
|
+
/* Deprecated. data-mutiny="widget" should be data-mutiny-widget="" */
|
20
|
+
$find($es, format('[data-{0}]', namespace)).each(function(i, e) {
|
27
21
|
var $e = $(e);
|
28
|
-
var
|
29
|
-
if(
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
for(var directive in directives) {
|
37
|
-
mutiny_call($e, directive, directives[directive]);
|
38
|
-
}
|
39
|
-
} else {
|
40
|
-
throw 'Unsupported data';
|
22
|
+
var directives = $e.data(namespace);
|
23
|
+
if(isString(directives)) {
|
24
|
+
/* data-mutiny='slider' */
|
25
|
+
initWidget($e, directives, {});
|
26
|
+
} else if(typeof data === 'object') {
|
27
|
+
/* data-mutiny='{"slider": {"some": "options"}}' */
|
28
|
+
for(var directive in directives) {
|
29
|
+
initWidget($e, directive, directives[directive]);
|
41
30
|
}
|
31
|
+
} else {
|
32
|
+
throw 'Unsupported data';
|
42
33
|
}
|
34
|
+
});
|
43
35
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
36
|
+
var queries = [];
|
37
|
+
for(var name in Mutiny.widgets) {
|
38
|
+
queries.push(format('[data-{0}-{1}]', namespace, dasherize(name)));
|
39
|
+
}
|
40
|
+
var $needWidgets = $find($es, queries.join(','));
|
41
|
+
for(var i=0; i < $needWidgets.length; i++) {
|
42
|
+
var $e = $($needWidgets[i]);
|
43
|
+
for(name in Mutiny.widgets) {
|
44
|
+
var key = format('{0}-{1}', namespace, name);
|
45
|
+
var data = $e.data(key);
|
46
|
+
if(data !== undefined) {
|
47
|
+
var updatedOptions = initWidget($e, name, data);
|
48
|
+
if(updatedOptions) {
|
49
|
+
$e.data(key, updatedOptions);
|
50
|
+
}
|
49
51
|
}
|
50
52
|
}
|
51
|
-
}
|
53
|
+
}
|
52
54
|
}
|
53
55
|
};
|
54
56
|
|
57
|
+
function $find($es, arg) {
|
58
|
+
return $es ? $es.filter(arg) : $(arg);
|
59
|
+
}
|
60
|
+
|
61
|
+
function initWidget($instigator, widgetName, instanceOptions) {
|
62
|
+
/* Deprecated: Mutiny.<widgetName> should be Mutiny.widgets.<widgetName> */
|
63
|
+
var widget = Mutiny.widgets[widgetName] || Mutiny[widgetName];
|
64
|
+
if(widget === undefined) {
|
65
|
+
throw format('"{0}" not found', widgetName);
|
66
|
+
}
|
67
|
+
|
68
|
+
instanceOptions = instanceOptions || {};
|
69
|
+
if(isString(instanceOptions)) {
|
70
|
+
var replacementOptions = {};
|
71
|
+
/* Deprecated: <widget>.string_arg should be <widget>.stringArg */
|
72
|
+
if(widget.string_arg) {
|
73
|
+
replacementOptions[widget.string_arg] = instanceOptions;
|
74
|
+
} else if(widget.stringArg) {
|
75
|
+
replacementOptions[widget.stringArg] = instanceOptions;
|
76
|
+
} else {
|
77
|
+
throw format('"{0}" cannot parse "{1}"', widgetName, instanceOptions);
|
78
|
+
}
|
79
|
+
instanceOptions = replacementOptions;
|
80
|
+
}
|
81
|
+
|
82
|
+
if(!instanceOptions.called) {
|
83
|
+
widget.init($instigator, $.extend({}, widget.defaults, instanceOptions));
|
84
|
+
instanceOptions.called = true;
|
85
|
+
return instanceOptions;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
function dasherize(string) {
|
90
|
+
return $.map(string.split(/(?=[A-Z])/),
|
91
|
+
function(t){ return t.toLowerCase(); }).join('-');
|
92
|
+
}
|
93
|
+
|
94
|
+
function lowerCaseFirst(string) {
|
95
|
+
return string.charAt(0).toLowerCase() + string.slice(1);
|
96
|
+
}
|
97
|
+
|
98
|
+
function startsWith(string, match) {
|
99
|
+
return string.indexOf(match) === 0;
|
100
|
+
}
|
101
|
+
|
102
|
+
var format = function() {
|
103
|
+
var regexes = [];
|
104
|
+
for(var i=0; i < 10; i++) {
|
105
|
+
regexes[i] = new RegExp('\\{' + i + '\\}', 'gm');
|
106
|
+
}
|
107
|
+
|
108
|
+
return function() {
|
109
|
+
var s = arguments[0];
|
110
|
+
for(var i=1; i < arguments.length; i++) {
|
111
|
+
s = s.replace(regexes[i-1], arguments[i]);
|
112
|
+
}
|
113
|
+
|
114
|
+
return s;
|
115
|
+
};
|
116
|
+
}();
|
117
|
+
|
55
118
|
function isString(obj) {
|
56
119
|
return !!obj.substring;
|
57
120
|
}
|
58
121
|
|
59
|
-
Mutiny.accordion = {
|
60
|
-
'defaults': {
|
122
|
+
Mutiny.widgets.accordion = {
|
123
|
+
'defaults': {},
|
61
124
|
'init': function($instigator, options){
|
62
125
|
var hash = window.location.hash;
|
63
126
|
if(hash && $instigator.find(hash).length > 0) {
|
@@ -74,39 +137,35 @@ Mutiny.accordion = {
|
|
74
137
|
}
|
75
138
|
};
|
76
139
|
|
77
|
-
Mutiny.datepicker = {
|
140
|
+
Mutiny.widgets.datepicker = {
|
78
141
|
'init': function($instigator, options) {
|
79
142
|
$instigator.datepicker(options);
|
80
143
|
}
|
81
144
|
};
|
82
145
|
|
83
|
-
|
146
|
+
function formatSpan(f, startValue, className) {
|
147
|
+
var inner = f.replace('%s', format('<span>{0}</span>', startValue || ' '));
|
148
|
+
if(className) {
|
149
|
+
return format('<span class="{0}">{1}</span>', className, inner);
|
150
|
+
} else {
|
151
|
+
return format('<span>{0}</span>', inner);
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
Mutiny.widgets.slider = {
|
84
156
|
'defaults': {'range': 'min'},
|
85
|
-
'_createFormatSpan': function(format, value, className) {
|
86
|
-
if(value === null || value === '') {
|
87
|
-
/* If value does not exist, force a non-empty element draw. Starting with empty
|
88
|
-
* element prevents correct drawing when it has been replace with real contents.
|
89
|
-
*/
|
90
|
-
value = ' ';
|
91
|
-
}
|
92
|
-
var inner = format.replace('%s', '<span>' + value + '</span>');
|
93
|
-
if(className) {
|
94
|
-
return '<span class="' + className + '">' + inner + '</span>';
|
95
|
-
} else {
|
96
|
-
return '<span>' + inner + '</span>';
|
97
|
-
}
|
98
|
-
},
|
99
157
|
'init': function($instigator, options){
|
100
158
|
var $ui;
|
101
159
|
if(options.target) {
|
102
160
|
$ui = $(options.target);
|
103
161
|
} else {
|
104
162
|
var id = $instigator.attr('id');
|
105
|
-
var extras = '';
|
106
163
|
if(id) {
|
107
|
-
|
164
|
+
$ui = $(format('<div id="{0}-mutiny-slider"></div>', id));
|
165
|
+
} else {
|
166
|
+
$ui = $('<div></div>');
|
108
167
|
}
|
109
|
-
$ui
|
168
|
+
$ui.insertAfter($instigator);
|
110
169
|
}
|
111
170
|
|
112
171
|
options.value = $instigator.val();
|
@@ -115,6 +174,7 @@ Mutiny.slider = {
|
|
115
174
|
$instigator.val(slider.value).change();
|
116
175
|
};
|
117
176
|
|
177
|
+
/* Deprecated. No more select sliders! */
|
118
178
|
if ($instigator.is('select')) {
|
119
179
|
var $options = $instigator.find('option');
|
120
180
|
options.min = Number($options.first().val());
|
@@ -136,17 +196,17 @@ Mutiny.slider = {
|
|
136
196
|
});
|
137
197
|
|
138
198
|
if(options.minLabel) {
|
139
|
-
$ui.append(
|
199
|
+
$ui.append(formatSpan(options.minLabel, options.min, 'min-label'));
|
140
200
|
}
|
141
201
|
if(options.maxLabel) {
|
142
|
-
$ui.append(
|
202
|
+
$ui.append(formatSpan(options.maxLabel, options.max, 'max-label'));
|
143
203
|
}
|
144
204
|
|
145
205
|
$ui.slider(options);
|
146
206
|
|
147
207
|
/* Need to append the element to a DOM loaded slider so this occurs after the slider instantiation. */
|
148
208
|
if(options.valueLabel) {
|
149
|
-
var $valueLabel = $(
|
209
|
+
var $valueLabel = $(formatSpan(options.valueLabel, options.value, 'value-label')).appendTo($ui.find('.ui-slider-handle'));
|
150
210
|
var $value = $valueLabel.find('span');
|
151
211
|
$instigator.change(function() {
|
152
212
|
$value.html($instigator.val());
|
@@ -155,41 +215,45 @@ Mutiny.slider = {
|
|
155
215
|
}
|
156
216
|
};
|
157
217
|
|
158
|
-
Mutiny.toggler = {
|
159
|
-
'defaults': {'
|
160
|
-
'
|
218
|
+
Mutiny.widgets.toggler = {
|
219
|
+
'defaults': {'classes': 'inactive active', 'preventDefault': false},
|
220
|
+
'stringArg': 'target',
|
161
221
|
'init': function($instigator, options){
|
162
222
|
var $target = $(options.target);
|
163
223
|
|
164
|
-
var
|
165
|
-
if(options
|
166
|
-
targetFunc = function(on) {
|
167
|
-
$target.toggleClass(options['class'], on);
|
168
|
-
};
|
169
|
-
} else {
|
224
|
+
var toggleFunc;
|
225
|
+
if(options.style) {
|
170
226
|
var noStyle = {};
|
171
227
|
for(var key in options.style) {
|
172
|
-
noStyle[key] = $
|
228
|
+
noStyle[key] = $instigator.css(key);
|
173
229
|
}
|
174
230
|
|
175
|
-
|
231
|
+
toggleFunc = function(on) {
|
232
|
+
$instigator.css(on ? options.style : noStyle);
|
176
233
|
$target.css(on ? options.style : noStyle);
|
177
234
|
};
|
235
|
+
} else {
|
236
|
+
var classes = options.classes.split(' ');
|
237
|
+
toggleFunc = function(on) {
|
238
|
+
$instigator.toggleClass(classes[0], !on);
|
239
|
+
$instigator.toggleClass(classes[1], on);
|
240
|
+
$target.toggleClass(classes[0], !on);
|
241
|
+
$target.toggleClass(classes[1], on);
|
242
|
+
};
|
178
243
|
}
|
179
244
|
|
180
245
|
if($instigator.is('input[type=radio]')) {
|
181
246
|
var name = $instigator.attr("name");
|
182
|
-
$('
|
183
|
-
|
184
|
-
$instigator.
|
185
|
-
targetFunc(active);
|
247
|
+
toggleFunc($instigator.is(':checked'));
|
248
|
+
$(format('input[name="{0}"]', name)).change(function(event){
|
249
|
+
toggleFunc($instigator.is(':checked'));
|
186
250
|
});
|
187
251
|
} else {
|
188
252
|
var active = false;
|
253
|
+
toggleFunc(active);
|
189
254
|
$instigator.click(function(event) {
|
190
255
|
active = !active;
|
191
|
-
|
192
|
-
targetFunc(active);
|
256
|
+
toggleFunc(active);
|
193
257
|
|
194
258
|
if(options.preventDefault) {
|
195
259
|
event.preventDefault();
|
@@ -199,4 +263,4 @@ Mutiny.toggler = {
|
|
199
263
|
}
|
200
264
|
};
|
201
265
|
|
202
|
-
})(window
|
266
|
+
})(window);
|
@@ -1,2 +1,2 @@
|
|
1
|
-
/*! Mutiny v0.
|
2
|
-
|
1
|
+
/*! Mutiny v0.3.0 - http://mutinyjs.com/ */
|
2
|
+
!function(a,b){function c(a,b){return a?a.filter(b):$(b)}function d(a,c,d){var e=h.widgets[c]||h[c];if(e===b)throw i('"{0}" not found',c);if(d=d||{},f(d)){var g={};if(e.string_arg)g[e.string_arg]=d;else{if(!e.stringArg)throw i('"{0}" cannot parse "{1}"',c,d);g[e.stringArg]=d}d=g}return d.called?void 0:(e.init(a,$.extend({},e.defaults,d)),d.called=!0,d)}function e(a){return $.map(a.split(/(?=[A-Z])/),function(a){return a.toLowerCase()}).join("-")}function f(a){return!!a.substring}function g(a,b,c){var d=a.replace("%s",i("<span>{0}</span>",b||" "));return c?i('<span class="{0}">{1}</span>',c,d):i("<span>{0}</span>",d)}$(function(){h.options.initOnReady&&h.init()});var h=a.Mutiny={options:{initOnReady:!0},widgets:{},init:function(a,g){g=g||"mutiny",c(a,i("[data-{0}]",g)).each(function(a,b){var c=$(b),e=c.data(g);if(f(e))d(c,e,{});else{if("object"!=typeof p)throw"Unsupported data";for(var h in e)d(c,h,e[h])}});var j=[];for(var k in h.widgets)j.push(i("[data-{0}-{1}]",g,e(k)));for(var l=c(a,j.join(",")),m=0;m<l.length;m++){var n=$(l[m]);for(k in h.widgets){var o=i("{0}-{1}",g,k),p=n.data(o);if(p!==b){var q=d(n,k,p);q&&n.data(o,q)}}}}},i=function(){for(var a=[],b=0;10>b;b++)a[b]=new RegExp("\\{"+b+"\\}","gm");return function(){for(var b=arguments[0],c=1;c<arguments.length;c++)b=b.replace(a[c-1],arguments[c]);return b}}();h.widgets.accordion={defaults:{},init:function(b,c){var d=a.location.hash;d&&b.find(d).length>0&&(c.active=d),b.accordion(c),$(a).on("hashchange",function(){var c=a.location.hash;c&&b.find(c).length>0&&b.accordion("activate",c)})}},h.widgets.datepicker={init:function(a,b){a.datepicker(b)}},h.widgets.slider={defaults:{range:"min"},init:function(a,b){var c;if(b.target)c=$(b.target);else{var d=a.attr("id");c=d?$(i('<div id="{0}-mutiny-slider"></div>',d)):$("<div></div>"),c.insertAfter(a)}if(b.value=a.val(),b.slide=function(b,c){a.val(c.value).change()},a.is("select")){var e=a.find("option");b.min=Number(e.first().val()),b.max=Number(e.last().val()),b.step=(b.max-b.min)/(e.length-1)}else $.each(["min","max","step"],function(c,d){b[d]=Number(b[d]||a.attr(d)||a.data(d))});if(a.change(function(){var d=Number(a.val());d>b.max&&(d=b.max),d<b.min&&(d=b.min),isNaN(d)&&(d=b.value),a.val(d),c.slider("value",d)}),b.minLabel&&c.append(g(b.minLabel,b.min,"min-label")),b.maxLabel&&c.append(g(b.maxLabel,b.max,"max-label")),c.slider(b),b.valueLabel){var f=$(g(b.valueLabel,b.value,"value-label")).appendTo(c.find(".ui-slider-handle")),h=f.find("span");a.change(function(){h.html(a.val())})}}},h.widgets.toggler={defaults:{classes:"inactive active",preventDefault:!1},stringArg:"target",init:function(a,b){var c,d=$(b.target);if(b.style){var e={};for(var f in b.style)e[f]=a.css(f);c=function(c){a.css(c?b.style:e),d.css(c?b.style:e)}}else{var g=b.classes.split(" ");c=function(b){a.toggleClass(g[0],!b),a.toggleClass(g[1],b),d.toggleClass(g[0],!b),d.toggleClass(g[1],b)}}if(a.is("input[type=radio]")){var h=a.attr("name");c(a.is(":checked")),$(i('input[name="{0}"]',h)).change(function(){c(a.is(":checked"))})}else{var j=!1;c(j),a.click(function(a){j=!j,c(j),b.preventDefault&&a.preventDefault()})}}}}(window);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mutiny-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -62,6 +62,5 @@ rubyforge_project:
|
|
62
62
|
rubygems_version: 1.8.23
|
63
63
|
signing_key:
|
64
64
|
specification_version: 3
|
65
|
-
summary: Mutiny within Rails 3.1
|
65
|
+
summary: Mutiny within Rails 3.1+
|
66
66
|
test_files: []
|
67
|
-
has_rdoc:
|