comunic/assets/js/metro/metro-tab-control.js
2016-11-19 12:08:12 +01:00

97 lines
2.9 KiB
JavaScript
Executable File

(function( $ ) {
$.widget("metro.tabcontrol", {
version: "1.0.0",
options: {
effect: 'none',
activateStoredTab: false,
tabclick: function(tab){},
tabchange: function(tab){}
},
_create: function(){
var that = this,
element = this.element,
tabs = $(element.children(".tabs")).children("li"),
frames = $(element.children(".frames")).children(".frame"),
element_id = element.attr("id");
if (element.data('effect') != undefined) {
this.options.effect = element.data('effect');
}
this.init(tabs, frames);
tabs.each(function(){
var tab = $(this).children("a");
tab.on('click', function(e){
e.preventDefault();
that.options.tabclick(this);
if ($(this).parent().hasClass('disabled')) {
return false;
}
tabs.removeClass("active");
tab.parent("li").addClass("active");
frames.hide();
var current_frame = $(tab.attr("href"));
switch (that.options.effect) {
case 'slide': current_frame.slideDown(); break;
case 'fade': current_frame.fadeIn(); break;
default: current_frame.show();
}
that._trigger('change', null, current_frame);
that.options.tabchange(this);
if (element_id != undefined) window.localStorage.setItem(element_id+"-current-tab", $(this).attr("href"));
});
});
if (this.options.activateStoredTab) this._activateStoredTab(tabs);
},
init: function(tabs, frames){
var that = this;
tabs.each(function(){
if ($(this).hasClass("active")) {
var current_frame = $($($(this).children("a")).attr("href"));
frames.hide();
current_frame.show();
that._trigger('change', null, current_frame);
}
});
},
_activateStoredTab: function(tabs){
var current_stored_tab = window.localStorage.getItem(this.element.attr('id')+'-current-tab');
if (current_stored_tab != undefined) {
tabs.each(function(){
var a = $(this).children("a");
if (a.attr("href") == current_stored_tab) {
a.click();
}
});
}
},
_destroy: function(){
},
_setOption: function(key, value){
this._super('_setOption', key, value);
}
})
})( jQuery );