-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjquery.form-toggle.js
More file actions
99 lines (97 loc) · 3.62 KB
/
jquery.form-toggle.js
File metadata and controls
99 lines (97 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
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
(function() {
jQuery(function($) {
return $.fn.formToggle = function(options) {
var element_selector, methods, settings;
settings = $.extend({
dataAttribute: "toggle",
reverse: false,
checkbox: 400,
radio: null,
select: null,
checkboxInit: null,
radioInit: null,
selectInit: null,
parameterize: function(string) {
return $.trim(string).toLowerCase().replace(/\W/g, '-');
}
}, options);
methods = {
showOrHideTarget: function(selected, target, args) {
if ((selected && !settings.reverse) || (settings.reverse && !selected)) {
return target.show(args);
} else {
return target.hide(args);
}
},
targetForController: function(controller, value) {
var selector, selectorPrefix, selectorSuffix;
if (value == null) {
value = null;
}
selector = controller.data(settings.dataAttribute);
selectorPrefix = controller.data("" + settings.dataAttribute + "-prefix");
selectorSuffix = controller.data("" + settings.dataAttribute + "-suffix");
if (selector == null) {
value || (value = controller.val());
value = settings.parameterize(value);
selector = selectorPrefix + value;
if (selectorSuffix != null) {
selector += selectorSuffix;
}
}
return $(selector);
},
handleCheckedState: function(controller, target, args) {
var selected;
selected = $(controller).is(':checked');
return methods.showOrHideTarget(selected, target, args);
},
handleSelect: function(select, args) {
return select.find("option").each(function(index) {
var option, selected, target;
option = $(this);
target = methods.targetForController(select, option.val());
selected = option.val() === $(select).val();
return methods.showOrHideTarget(selected, target, args);
});
}
};
element_selector = "[data-" + settings.dataAttribute + "], [data-" + settings.dataAttribute + "-prefix]";
$(element_selector).each(function(index, controller) {
var setting, target;
controller = $(controller);
if (controller.is('select')) {
return methods.handleSelect(controller, settings.selectInit);
} else {
target = methods.targetForController(controller);
if (controller.is(':checkbox')) {
setting = settings.checkboxInit;
}
if (controller.is(':radio')) {
setting = settings.radioInit;
}
return methods.handleCheckedState(controller, target, setting);
}
});
return $(document).on('change', element_selector, function(event) {
var controller, group, target;
controller = $(this);
if (controller.is('select')) {
methods.handleSelect(controller, settings.select);
}
if (controller.is(':checkbox')) {
target = methods.targetForController(controller);
methods.handleCheckedState(controller, target, settings.checkbox);
}
if (controller.is(':radio')) {
group = controller.attr("name");
return $(":radio[name='" + group + "']").each(function(index, radio) {
radio = $(radio);
target = methods.targetForController(radio);
return methods.handleCheckedState(radio, target, settings.radio);
});
}
});
};
});
}).call(this);