117 lines
3.1 KiB
JavaScript
117 lines
3.1 KiB
JavaScript
/* =========================================================
|
|
* 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 ); |