/
jquery.togglecontrols.js
58 lines (49 loc) · 1.57 KB
/
jquery.togglecontrols.js
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
(function($) {
// Example of togglecontrols:
// $('.js-toggle').togglecontrols();
// <a href="#" class="js-toggle" data-togglecontrols='{"toggleClass":"is-hidden hidden-xs", "selector":".panel"}'>
$._jtoggle_selectors = [];
$.fn.togglecontrols = function(options) {
if($._jtoggle_selectors.indexOf($(this).selector) > -1) { //prevent dup init for a given selector
return;
}
$._jtoggle_selectors.push($(this).selector);
var $el = $(this);
var defaults = $.extend({
toggleClass: 'is-hidden',
targetActiveClass: 'is-active',
eventName:'click',
selector:'.tc-dialog',
preventDefault:false,
activeTarget:false
}, options);
$($el).on(defaults.eventName, function(e){
var data = $(e.target).data('togglecontrols');
var targetEl = e.target;
if(!data) {
data = $(e.target.parentNode).data('togglecontrols');
targetEl = e.target.parentNode;
if(!data) {
data = $(e.target.parentNode.parentNode).data('togglecontrols');
targetEl = e.target.parentNode.parentNode;
if(!data){
data={};
targetEl = e.target;
}
}
}
var controls = $.extend({}, defaults, data);
$(controls.selector).toggleClass(controls.toggleClass);
if(controls.preventDefault) {
e.preventDefault();
}
if(controls.activeTarget) {
$(targetEl).toggleClass(controls.targetActiveClass);
}
});
};
}(jQuery));
// auto-run
$(function(){
$('.js-toggle').togglecontrols();
});