Subversion-Projekte lars-tiefland.cienc

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
5 lars 1
/* =========================================================
2
 * bootstrap-tabdrop.js
3
 * http://www.eyecon.ro/bootstrap-tabdrop
4
 * =========================================================
5
 * Copyright 2012 Stefan Petre
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 * http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 * ========================================================= */
19
 
20
!function( $ ) {
21
 
22
	var WinReszier = (function(){
23
		var registered = [];
24
		var inited = false;
25
		var timer;
26
		var resize = function(ev) {
27
			clearTimeout(timer);
28
			timer = setTimeout(notify, 100);
29
		};
30
		var notify = function() {
31
			for(var i=0, cnt=registered.length; i<cnt; i++) {
32
				registered[i].apply();
33
			}
34
		};
35
		return {
36
			register: function(fn) {
37
				registered.push(fn);
38
				if (inited === false) {
39
					$(window).bind('resize', resize);
40
					inited = true;
41
				}
42
			},
43
			unregister: function(fn) {
44
				for(var i=0, cnt=registered.length; i<cnt; i++) {
45
					if (registered[i] == fn) {
46
						delete registered[i];
47
						break;
48
					}
49
				}
50
			}
51
		}
52
	}());
53
 
54
	var TabDrop = function(element, options) {
55
		this.element = $(element);
56
		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>')
57
							.prependTo(this.element);
58
		if (this.element.parent().is('.tabs-below')) {
59
			this.dropdown.addClass('dropup');
60
		}
61
		WinReszier.register($.proxy(this.layout, this));
62
		this.layout();
63
	};
64
 
65
	TabDrop.prototype = {
66
		constructor: TabDrop,
67
 
68
		layout: function() {
69
			var collection = [];
70
			this.dropdown.removeClass('hide');
71
			this.element
72
				.append(this.dropdown.find('li'))
73
				.find('>li')
74
				.not('.tabdrop')
75
				.each(function(){
76
					if(this.offsetTop > 0) {
77
						collection.push(this);
78
					}
79
				});
80
			if (collection.length > 0) {
81
				collection = $(collection);
82
				this.dropdown
83
					.find('ul')
84
					.empty()
85
					.append(collection);
86
				if (this.dropdown.find('.active').length == 1) {
87
					this.dropdown.addClass('active');
88
				} else {
89
					this.dropdown.removeClass('active');
90
				}
91
			} else {
92
				this.dropdown.addClass('hide');
93
			}
94
		}
95
	}
96
 
97
	$.fn.tabdrop = function ( option ) {
98
		return this.each(function () {
99
			var $this = $(this),
100
				data = $this.data('tabdrop'),
101
				options = typeof option === 'object' && option;
102
			if (!data)  {
103
				$this.data('tabdrop', (data = new TabDrop(this, $.extend({}, $.fn.tabdrop.defaults,options))));
104
			}
105
			if (typeof option == 'string') {
106
				data[option]();
107
			}
108
		})
109
	};
110
 
111
	$.fn.tabdrop.defaults = {
112
		text: '<i class="icon-align-justify"></i>'
113
	};
114
 
115
	$.fn.tabdrop.Constructor = TabDrop;
116
 
117
}( window.jQuery );