pushrbx icon

switcher

pushrbx | PRO | 05/02/13 08:05:28 PM UTC | 0 ⭐ | 385 👁️ | Never ⏰ | []
JavaScript |

8.43 KB

|

None

|

0 👍

/

0 👎

;
(function($) {
    $.fn.navs = function(o) {
        this
                .each(function() {
                    var th = $(this), data = th.data('navs'), _ = {
                        enable : true,
                        actCl : 'active',
                        changeEv : 'change',
                        indx : [],
                        hshx : [],
                        useHash : false,
                        defHash : '#!/',
                        emptyHash : '#',
                        outerHash : false,
                        autoPlay : false,
                        blockSame : true,
                        hover : true,
                        contRetFalse : true,
                        preFu : function() {
                            _.li.each(function(n) {
                                var th = $(this);
                                _.indx[n] = th;
                                if (_.useHash) {
                                    _.hshx[n] = $('a', th).attr('href');
 
                                    if (location.hash == _.hshx[n]) {
                                        th.addClass(_.actCl);
                                    }
                                }
 
                            });
                        },
                        rfrshFu : function() {
                            _.prev = _.curr
                            _.pren = _.n
                            _.curr = false
                            _.n = -1
                            _.param = 'close'
 
                            _.li.each(function(n) {
                                var th = $(this)
                                if (th.hasClass(_.actCl))
                                    _.curr = th, _.n = n, _.href = $('a', th)
                                            .attr('href'),
                                            _.param = _.useHash ? _.href : _.n
                            })
                        },
                        markFu : function() {
                            _.li.each(function(n) {
                                var th = $(this)
                                _.n == n ? _.hvrin(th) : _.hvrout(th)
                            })
                        },
                        hashFu : function() {
                            $(window)
                                    .bind(
                                            'hashchange',
                                            function() {
                                                if (location.hash == _.emptyHash
                                                        || location.hash.length == 0) {
                                                    location.hash = _.hash
                                                    return false
                                                }
                                                _.prevHash = _.hash
                                                _
                                                        .checkHashFu(_.outerHash = _.hash = location.hash)
                                            })
                            $('a', _.li).click(function() {
                                if (!_.enable)
                                    return false
                            })
                        },
                        checkHashFu : function(hash) {
                            if (hash == _.emptyHash || hash.length == 0)
                                location.hash = _.defHash
                            if (hash == '#back')
                                return _.backFu()
                            if (hash == '#close')
                                return _.closeFu()
                            _.li.each(function(n) {
                                if (_.hshx[n] == _.hash) {
                                    _.chngFu(n), _.outerHash = false
                                }
                            })
                            if (_.outerHash)
                                _.li.removeClass(_.actCl), _.rfrshFu(), _
                                        .markFu(), _.param = _.outerHash, _.me
                                        .trigger(_.changeEv)
                        },
                        cntrFu : function() {
                            _.li.each(function(n) {
                                var th = $(this)
                                $('a', th).click(function() {
                                    _.chngFu(n)
                                    if (_.contRetFalse)
                                        return false
                                })
                            })
                        },
                        autoPlayFu : function() {
                            if (!_.autoPlay)
                                return false
                            if (_.int)
                                clearInterval(_.int)
                            _.int = setInterval(_.nextFu, _.autoPlay)
                        },
                        chngFu : function(n) {
                            if (!_.enable)
                                return false
                            if (n == _.n && _.blockSame)
                                return false
                            _.indx[n] && _.li.removeClass(_.actCl)
                                    && _.indx[n].addClass(_.actCl)
                            _.rfrshFu()
                            _.markFu()
                            _.autoPlayFu()
                            if (_.useHash && location.hash != _.hshx[_.n])
                                location.hash = _.hshx[_.n]
 
                            _.me.trigger(_.changeEv)
                        },
                        closeFu : function() {
                            _.li.removeClass(_.actCl)
                            _.rfrshFu()
                            _.markFu()
                            _.me.trigger(_.changeEv)
                            location.hash = _.defHash
                        },
                        backFu : function() {
                            _.chngFu(_.pren)
                        },
                        nextFu : function() {
                            var n = _.n
                            _.chngFu(++n < _.li.length ? n : 0)
                        },
                        prevFu : function() {
                            var n = _.n
                            _.chngFu(--n >= 0 ? n : _.li.length - 1)
                        },
                        customStr : function(str) {
                            // console.log(str)
                        },
                        init : function() {
                            _.li = $('>ul>li', _.me)
                            _.preFu()
                            _.rfrshFu()
                            _.markFu()
                            _.useHash ? _.hashFu() : _.cntrFu()
                            _.hoverFu()
                            _.autoPlayFu()
                            _.useHash
                                    && _
                                            .checkHashFu(_.outerHash = _.hash = location.hash)
                            _.li.hasClass(_.actCl) && _.me.trigger(_.changeEv)
                        },
                        hoverFu : function() {
                            _.li.each(function(n) {
                                var th = $(this)
                                $('a', th).bind('mouseenter', function() {
                                    if (_.enable)
                                        if (_.hover && n != _.n)
                                            _.hvrin(th)
                                }).bind('mouseleave', function() {
                                    if (_.enable)
                                        if (_.hover && n != _.n)
                                            _.hvrout(th)
                                })
                            })
                        },
                        hvrin : function(el) {
                            _.hoverIn(el, _)
                            _.hover == 'sprites'
                                    && $('a', el).sprites('hoverin')
                        },
                        hvrout : function(el) {
                            _.hoverOut(el, _)
                            _.hover == 'sprites'
                                    && $('a', el).sprites('hoverout')
                        },
                        hoverIn : function() {
                        },
                        hoverOut : function() {
                        },
                        defFunc : function() {
                        }
                    }
 
                    data ? _ = data : th.data({
                        navs : _
                    })
                    typeof o == 'object' && $.extend(_, o)
 
                    if (typeof o == 'function')
                        return th.bind(_.changeEv, function() {
                            o(_.param, _);
                            return false
                        }).trigger(_.changeEv)
 
                    _.me || _.init(_.me = th)
 
                    typeof o == 'number' && _.chngFu(o)
                    typeof o == 'boolean' && (_.enable = o)
                    typeof o == 'string'
                            && (o == 'prev' || o == 'next' || o == 'close'
                                    || o == 'back' ? _[o + 'Fu']()
                                    : _.useHash ? o.slice(0, 3) == '#!/'
                                            && (location.hash = o)
                                            || _.customStr(o) : _.customStr(o))
                })
        return this
    }
 
    $.fn.tabs = function(o) {
        return this.each(function() {
            var th = $(this), _ = th.data('tabs')
                    || {
                        enable : true,
                        show : 0,
                        blockSame : true,
                        changeEv : 'change',
                        empty : '#!/',
                        preFu : function() {
                            _.li.hide()
                        },
                        actFu : function() {
                            _.prev && _.prev.hide()
                            _.curr && _.curr.show()
                        },
                        searchSubCatFu: function(s) {
                            var subtest = -1;
                            var subcat = false;
 
                            if(s.slice(0, 3) == '#!/') {
                                subtest = s.slice(3).indexOf('/');
 
                                if(subtest >= 0) {
                                    subcat = s.slice(subtest + 4);
                                    if(subcat.indexOf('/') >= 0) {
                                        return _.searchSubCatFu(subcat);
                                    }
 
                                    return subcat;
                                }
 
                                return s.slice(3);
                            }
                            else {
                                subtest = s.indexOf('/');
                                if(subtest >= 0) {
                                    subcat = s.slice(subtest + 1);
                                    if(subcat.indexOf('/') >= 0) {
                                        return _.searchSubCatFu(subcat);
                                    }
                                    return subcat;
                                }
                            }
 
                            return false;
                        },
                        navFu : function(s) {
                            if (_.pres == s || s.slice(0, 3) != '#!/')
                                return false
                            _.pres = s
                            s == _.empty && $.when(_.li).then(_.closeFu)
                            var found = false;
                            var needle = _.searchSubCatFu(s);
 
                            _.li.each(function(n) {
                                if($(this).attr('id') == needle){
                                    _.chngFu(n);
                                    $(document).trigger("pageChange", $(this));
                                }
                            })
                        },
                        chngFu : function(a) {
                            if (!_.enable || (a == _.n && _.blockSame)
                                    || a >= _.li.length)
                                return false
                            $.when(_.li).then(function() {
                                _.pren = _.n
                                _.prev = _.curr
                                _.curr = _.li.eq(_.n = a)
                                _.actFu(_)
                                _.me.trigger(_.changeEv)
                            })
                        },
                        nextFu : function() {
                            var n = _.n
                            _.way = 1
                            _.chngFu(++n < _.li.length - _.show ? n : 0)
                        },
                        prevFu : function() {
                            var n = _.n
                            _.way = -1
                            _.chngFu(--n >= 0 ? n : _.li.length - 1 - _.show)
                        },
                        closeFu : function() {
                            if (_.pres == 'close')
                                return false
                            _.pren = _.n
                            _.prev = _.curr
                            _.n = -1
                            _.curr = false
                            _.pres = 'close'
                            _.actFu(_)
                        },
                        backFu : function() {
                            _.chngFu(_.pren)
                        },
                        init : function() {
                            _.ul = $('>ul', _.me)
                            _.li = $('>li', _.ul)
                            _.preFu(_)
                            _.navs && _.navs.navs(function(n) {
                                th.tabs(n)
                            })
                        }
                    }
 
            if (typeof o == 'object')
                _ = $.extend(true, _, o)
 
            _.me || _.init(_.me = th.data({
                tabs : _
            }))
 
            typeof o == 'function' && _.me.bind(_.changeEv, function() {
                o(_.n, _);
                return false
            })
            typeof o == 'boolean' && (_.enable = o)
            typeof o == 'number' && _.chngFu(o)
            typeof o == 'string'
                    && (o == 'prev' || o == 'next' || o == 'close'
                            || o == 'back' ? _[o + 'Fu']() : _.navFu(o))
        })
    }
})(jQuery)

Comments