Subversion-Projekte lars-tiefland.ci

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

/* =========================================================
 * bootstrap-tabdrop.js 
 * http://www.eyecon.ro/bootstrap-tabdrop
 * =========================================================
 * Copyright 2012 Stefan Petre
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ========================================================= */
 
!function( $ ) {

        var WinReszier = (function(){
                var registered = [];
                var inited = false;
                var timer;
                var resize = function(ev) {
                        clearTimeout(timer);
                        timer = setTimeout(notify, 100);
                };
                var notify = function() {
                        for(var i=0, cnt=registered.length; i<cnt; i++) {
                                registered[i].apply();
                        }
                };
                return {
                        register: function(fn) {
                                registered.push(fn);
                                if (inited === false) {
                                        $(window).bind('resize', resize);
                                        inited = true;
                                }
                        },
                        unregister: function(fn) {
                                for(var i=0, cnt=registered.length; i<cnt; i++) {
                                        if (registered[i] == fn) {
                                                delete registered[i];
                                                break;
                                        }
                                }
                        }
                }
        }());

        var TabDrop = function(element, options) {
                this.element = $(element);
                this.dropdown = $('<li class="dropdown hide pull-right tabdrop"><a class="dropdown-toggle" data-toggle="dropdown" href="#">'+options.text+' <b class="caret"></b></a><ul class="dropdown-menu"></ul></li>')
                                                        .prependTo(this.element);
                if (this.element.parent().is('.tabs-below')) {
                        this.dropdown.addClass('dropup');
                }
                WinReszier.register($.proxy(this.layout, this));
                this.layout();
        };

        TabDrop.prototype = {
                constructor: TabDrop,

                layout: function() {
                        var collection = [];
                        this.dropdown.removeClass('hide');
                        this.element
                                .append(this.dropdown.find('li'))
                                .find('>li')
                                .not('.tabdrop')
                                .each(function(){
                                        if(this.offsetTop > 0) {
                                                collection.push(this);
                                        }
                                });
                        if (collection.length > 0) {
                                collection = $(collection);
                                this.dropdown
                                        .find('ul')
                                        .empty()
                                        .append(collection);
                                if (this.dropdown.find('.active').length == 1) {
                                        this.dropdown.addClass('active');
                                } else {
                                        this.dropdown.removeClass('active');
                                }
                        } else {
                                this.dropdown.addClass('hide');
                        }
                }
        }

        $.fn.tabdrop = function ( option ) {
                return this.each(function () {
                        var $this = $(this),
                                data = $this.data('tabdrop'),
                                options = typeof option === 'object' && option;
                        if (!data)  {
                                $this.data('tabdrop', (data = new TabDrop(this, $.extend({}, $.fn.tabdrop.defaults,options))));
                        }
                        if (typeof option == 'string') {
                                data[option]();
                        }
                })
        };

        $.fn.tabdrop.defaults = {
                text: '<i class="icon-align-justify"></i>'
        };

        $.fn.tabdrop.Constructor = TabDrop;

}( window.jQuery );