123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- (function($) {
- //Attach this new method to jQuery
- $.fn.extend({
- //This is where you write your plugin's name
- champ: function(options) {
- //Iterate over the current set of matched elements
- var defaults = {
- selector: "tab_wrapper",
- plugin_type: "tab",
- side: "",
- //responsive: "true",
- active_tab: "1",
- controllers: "false",
- ajax: "false",
- multiple_tabs: "false",
- show_ajax_content_in_tab: "false",
- content_path: "false"
- }
- var obj = $.extend(defaults, options);
- var li_rel = 1,
- div_rel = 1;
- return this.each(function() {
- var plugin_type = obj.plugin_type;
- var side = obj.side;
- var active_tab = obj.active_tab;
- var controllers = obj.controllers;
- //var responsive = obj.responsive;
- var multiple_tabs = obj.multiple_tabs;
- var ajax = obj.ajax;
- var show_ajax_content_in_tab = obj.show_ajax_content_in_tab;
- var content_path = obj.content_path;
- var tab_content_selector = $(this).find(" > div > div.tab_content");
- var tab_selector = $(this).find(" >ul li");
- var parent = $(this);
- var controller_parent = $(".controller").closest(".tab_wrapper");
- var con_siblings;
- if (side != "") {
- parent.addClass(side + "_side");
- }
- if (controllers == "true") {
- parent.addClass("withControls");
- parent.append("<div class='controller'><span class='previous'>previous</span><span class='next'>next</span></div>");
- }
- if (plugin_type == "accordion") {
- //alert(34);
- parent.addClass("accordion");
- parent.removeClass(side + "_side");
- parent.removeClass("withControls");
- $(".controller", parent).remove();
- }
- if (ajax == "true") {
- $.ajax({
- url: content_path,
- success: function(result) {
- $(" .tab_content.tab_" + show_ajax_content_in_tab, parent).html(result);
- }
- });
- $(document).ajaxError(function(event, request, settings) {
- $(" .tab_content.tab_" + show_ajax_content_in_tab, parent).prepend("<h4 class='error'>Error requesting page " + settings.url + "</h2>");
- });
- }
- function hide_controls(parent) {
- if (parent.find(" >ul li:eq(0)").hasClass("active")) {
- $(".controller .previous", parent).hide();
- } else {
- $(".controller .previous", parent).show();
- }
- if (parent.find(" >ul li").last().hasClass("active")) {
- $(".controller .next", parent).hide();
- } else {
- $(".controller .next", parent).show();
- }
- }
- $(".controller .previous", $(this)).click(function() {
- con_siblings = $(this).closest(".controller");
- con_siblings.siblings("ul").find("li.active").prev().trigger("click");
- hide_controls(controller_parent);
- });
- $(".controller .next", $(this)).click(function() {
- con_siblings = $(this).closest(".controller");
- con_siblings.siblings("ul").find("li.active").next().trigger("click");
- hide_controls(controller_parent);
- });
- $(this).find(" >ul li").removeClass("active");
- $(this).find(" > div > div.tab_content").removeClass("active");
- if (active_tab == "") {
- $(this).find(" >ul li:eq(0)").addClass("active").show(); //set active tab on load
- $(this).find(" > div > div.tab_content:eq(0)").addClass("active").show(); //set active tab on load
- hide_controls(parent);
- } else {
- $(this).find(" >ul li:eq(" + (active_tab - 1) + ")").addClass("active").show(); //set active tab on load
- $(this).find(" > div > div.tab_content:eq(" + (active_tab - 1) + ")").addClass("active").show(); //set active tab on load
- hide_controls(parent);
- }
- tab_content_selector.first().addClass("first");
- tab_content_selector.last().addClass("last");
- // add class to content div
- tab_content_selector.each(function() {
- var tab_count = $(this).parents(".tab_wrapper").length;
- var add_relation = "tab_" + tab_count + "_" + div_rel;
- //var add_relation = "tab_" + div_rel;
- $(this).addClass(add_relation);
- $(this).attr("title", add_relation);
- div_rel++;
- });
- if (multiple_tabs == "true") {
- var get_parent = $(this).closest(".tab_wrapper");
- var active_tab_text = $(this).find(" >ul li:eq(0)").text();
- get_parent.addClass("show-as-dropdown");
- get_parent.prepend("<div class='active_tab'><span class='text'>" + active_tab_text + "</span><span class='arrow'></span></div>");
- }
- $(".active_tab").click(function() {
- $(this).next().stop(true, true).slideToggle();
- });
- // add relation attr to li and generate accordion header for mobile
- //if (responsive == "true") {
- tab_selector.each(function() {
- var tab_count = $(this).parents(".tab_wrapper").length;
- var add_relation = "tab_" + tab_count + "_" + li_rel;
- var accordian_header = $(this).text();
- //var add_relation = "tab_" + li_rel;
- var get_parent = $(this).closest(".tab_wrapper");
- $(this).attr("rel", add_relation);
- var current_tab_class = $(this).attr("class");
- tab_content_selector.each(function() {
- if ($(this).hasClass(add_relation)) {
- get_parent.find(" > div > div.tab_content." + add_relation).before("<div title='" + add_relation + "' class='accordian_header " + add_relation + ' ' + current_tab_class + "'>" + accordian_header + "<span class='arrow'></span></div>");
- }
- });
- li_rel++;
- });
- // }
- // on click of accordion header slideUp/SlideDown respective content
- $(".accordian_header").click(function() {
- var clicked_header = $(this).attr("title");
- var content_status = $(this).next(".tab_content").css("display");
- var get_closest_parent = $(this).closest(".tab_wrapper");
- if (content_status == "none") {
- get_closest_parent.find(">.content_wrapper >.accordian_header").removeClass("active");
- $(this).addClass("active");
- get_closest_parent.find(">ul >li").removeClass("active");
- get_closest_parent.find(">ul >li[rel='" + clicked_header + "']").addClass("active");
- tab_content_selector.removeClass("active").stop(true, true).slideUp();
- get_closest_parent.find(" > div > div.tab_content." + clicked_header).addClass("active").stop(true, true).slideDown();
- } else {
- get_closest_parent.find(">.content_wrapper >.accordian_header").removeClass("active");
- $(this).removeClass("active");
- get_closest_parent.find(">ul >li").removeClass("active");
- get_closest_parent.find(" > div > div.tab_content." + clicked_header).removeClass("active").stop(true, true).slideUp();
- }
- });
- // on click of tab hide/show respective content
- tab_selector.click(function() {
- var clicked_tab = $(this).attr("rel");
- var get_new_closest_parent = $(this).closest(".tab_wrapper");
- var get_closest_tab_list = $(this).closest(".tab_list");
- get_closest_tab_list.next(".content_wrapper").find(" >.accordian_header").removeClass("active");
- get_new_closest_parent.find(".accordian_header." + clicked_tab).addClass("active");
- tab_content_selector.removeClass("active").hide();
- get_new_closest_parent.find(" > div > div.tab_content." + clicked_tab).addClass("active").show();
- tab_selector.removeClass("active");
- $(this).addClass("active");
- hide_controls(get_new_closest_parent);
- var winWidth = $(window).width();
- if (multiple_tabs == "true") {
- if ($(this).parent(".tab_list").parent(".show-as-dropdown")) {
- var selected_tab_text = $(this).text();
- $(".active_tab .text").text(selected_tab_text);
- }
- if (winWidth <= 768) {
- $(this).closest(".tab_list").stop(true, true).slideUp();
- }
- }
- });
- });
- }
- });
- })(jQuery);
|