mutiny-rails 0.2.0 → 0.3.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.
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:
|