/* ========================================================= * 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. * ========================================================= */ /***************************************************************** * NOTE: THIS IS A CUSTOM FIXED VERSION!!!!!!!!!!!!!!!!!!!!!! * - THE ORIGINAL HAS A MEMORY LEAK, SO WE'VE HAD TO EMBED THIS * INTO THE CORE WITH THE FIX * * --- UMBRACO CORE TEAM *****************************************************************/ !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 -1) { registered.splice(index, 1); } } }; }()); var TabDrop = function(element, options) { this.element = $(element); this.dropdown = $('').prependTo(this.element); if (this.element.parent().is('.tabs-below')) { this.dropdown.addClass('dropup'); } this.resizeCallback = $.proxy(this.layout, this); WinReszier.register(this.resizeCallback); 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'); } }, destroy: function() { this.dropdown.html(); WinReszier.unregister(this.resizeCallback); } }; $.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: '' }; $.fn.tabdrop.Constructor = TabDrop; }(window.jQuery);