Fixes tabdrop memory leak U4-6907 Bootstrap tab drop has memory leaks, fixes tab/header to use the correct bootstrap tab api, simplifies the header code dramatically and speeds up processing. Fixes mem leak with delayedMouseLeave.directive
This commit is contained in:
62
src/Umbraco.Web.UI.Client/lib/bootstrap-tabdrop/README.md
Normal file
62
src/Umbraco.Web.UI.Client/lib/bootstrap-tabdrop/README.md
Normal file
@@ -0,0 +1,62 @@
|
||||
bootstrap-tabdrop
|
||||
=================
|
||||
|
||||
*****************************************************************
|
||||
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
|
||||
*****************************************************************
|
||||
|
||||
A dropdown tab tool for @twitter bootstrap forked from Stefan Petre's (of eyecon.ro),
|
||||
|
||||
The dropdown tab appears when your tabs do not all fit in the same row.
|
||||
|
||||
Original site and examples: http://www.eyecon.ro/bootstrap-tabdrop/
|
||||
|
||||
Added functionality: Displays the text of an active tab selected from the dropdown list instead of the text option on the dropdown tab.
|
||||
|
||||
|
||||
## Requirements
|
||||
|
||||
* [Bootstrap](http://twitter.github.com/bootstrap/) 2.0.4+
|
||||
* [jQuery](http://jquery.com/) 1.7.1+
|
||||
|
||||
## Example
|
||||
|
||||
No additional HTML needed - the script adds it when the dropdown tab is needed.
|
||||
|
||||
Using bootstrap-tabdrop.js
|
||||
Call the tab drop via javascript on .nav-tabs and .nav-pills:
|
||||
```js
|
||||
$('.nav-pills, .nav-tabs').tabdrop()
|
||||
```
|
||||
|
||||
### Options
|
||||
|
||||
#### text
|
||||
Type: string
|
||||
Default: icon
|
||||
```html
|
||||
<i class="icon-align-justify"></i>
|
||||
```
|
||||
To change the default value, call
|
||||
```javascript
|
||||
.tabdrop({text: "your text here"});
|
||||
```
|
||||
when initalizing the tabdrop. The displayed value will change when a tab is selected from the dropdown list.
|
||||
|
||||
### Methods
|
||||
|
||||
```js
|
||||
.tabdrop(options)
|
||||
```
|
||||
|
||||
Initializes an tab drop.
|
||||
|
||||
```js
|
||||
.tabdrop('layout')
|
||||
```
|
||||
|
||||
Checks if the tabs fit in one single row.
|
||||
132
src/Umbraco.Web.UI.Client/lib/bootstrap-tabdrop/bootstrap-tabdrop.js
vendored
Normal file
132
src/Umbraco.Web.UI.Client/lib/bootstrap-tabdrop/bootstrap-tabdrop.js
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
/* =========================================================
|
||||
* 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<cnt; i++) {
|
||||
registered[i].apply();
|
||||
}
|
||||
};
|
||||
return {
|
||||
register: function(fn) {
|
||||
registered.push(fn);
|
||||
if (inited === false) {
|
||||
$(window).bind('resize', resize);
|
||||
inited = true;
|
||||
}
|
||||
},
|
||||
unregister: function(fn) {
|
||||
var index = registered.indexOf(fn);
|
||||
if (index > -1) {
|
||||
registered.splice(index, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
}());
|
||||
|
||||
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');
|
||||
}
|
||||
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: '<i class="icon-align-justify"></i>'
|
||||
};
|
||||
|
||||
$.fn.tabdrop.Constructor = TabDrop;
|
||||
|
||||
}(window.jQuery);
|
||||
Reference in New Issue
Block a user