-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.tabify.js
120 lines (115 loc) · 3.84 KB
/
jquery.tabify.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
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/**
* Create an anonymous function to avoid library conflicts
*
* Example 1:
*
* $("ul.tabify").tabify({"tabElement": "li"});
*
* Example 2:
*
* $("ul.tabify").tabify(".tabify li");
*
* Example 3:
*
* $("ul.tabify").tabify(function() {
* console.log("Tabify callback triggered.");
* });
*/
(function($) {
/**
* Add our plugin to the jQuery.fn object
*/
$.fn.tabify = function() {
/**
* Define some default settings
*/
var defaults = {
"collectionElement": "ul",
"tabElement": "li",
"collectionSelector": ".tabify",
"tabSelector": ".tabify li",
"activeClass": "active",
"inactiveClass": "",
"trigger": "click",
"callback": function() {
console.log("Tabify callback triggered.");
}
};
var options = {};
// tabify( /* object */ options, /* string */ "selector", /* function */ callback );
// tabify( /* object */ options, /* string */ "selector" );
// tabify( /* object */ options, /* function */ callback );
// tabify( /* string */ "selector" );
// tabify( /* function */ callback );
// tabify( /* object */ options );
if (arguments.length == 1) {
if (typeof(arguments[0] == "string" )) {
options["tabSelector"] = arguments[0];
}
else if (typeof(arguments[0]) == "function") {
options["callback"] = arguments[0];
}
else if (typeof(arguments[0]) == "object") {
options = arguments[0];
}
}
else if (arguments.length == 2) {
options = arguments[0];
if (typeof(arguments[1] == "string" )) {
options["tabSelector"] = arguments[1];
}
else if (typeof(arguments[1]) == "function") {
options["callback"] = arguments[1];
}
}
else if (arguments.length == 3) {
options = arguments[0];
options["tabSelector"] = arguments[1];
options["callback"] = arguments[2];
}
/**
* If the 'options' argument is a string, then a selector
* was passed instead of an options object. Normalize
* the selector into the options object.
*/
if (typeof(arguments[0]) == "string") {
options["tabSelector"] = arguments[0];
}
/**
* If the type of the passed argument is a function,
* then a callback was passed. Add it to the options object.
*/
if (typeof(arguments[0]) == "function") {
options["callback"] = arguments[0];
}
/**
* Merge the runtime options with the default settings
*/
var options = $.extend({}, defaults, options);
/**
* Iterate through the collection of elements and
* return the object to preserve method chaining
*/
return this.each(function(i) {
/**
* Wrap the current element in an instance of jQuery
*/
var $collection = $(this);
if (! $collection.hasClass("tabify")) {
$collection.addClass("tabify");
}
/**
* Do the thing.
*/
$(options.tabSelector, $collection).on(options.trigger, function(e) {
e.preventDefault();
var $tab = $(this);
$(options.tabElement, $collection).removeClass(options.activeClass);
$tab.addClass(options.activeClass);
if (typeof(options.callback) == "function") {
$tab.on("click", options.callback);
}
});
});
};
})(jQuery);