vpn.email
Version:
vpn.email client
185 lines (146 loc) • 5.79 kB
JavaScript
$.widget( "metro.tabcontrol" , {
version: "3.0.0",
options: {
openTarget: false,
saveState: false,
onTabClick: function(tab){return true;},
onTabChange: function(tab){},
_current: {tab: false, frame: false}
},
_create: function () {
var that = this, element = this.element, o = this.options;
var tabs = element.children('.tabs').find('li').children('a');
var frames = element.children('.frames').children('div');
var tab, target, frame;
$.each(element.data(), function(key, value){
if (key in o) {
try {
o[key] = $.parseJSON(value);
} catch (e) {
o[key] = value;
}
}
});
if (o.saveState && element.attr('id') !== undefined && element.attr('id').trim() !== '') {
var stored_target = window.localStorage.getItem(element.attr('id')+"-stored-tab");
if (stored_target && stored_target !== 'undefined') {
tab = element.find("a[href='"+stored_target+"']");
if (tab) {
target = tab.attr('href');
frame = target && target.isUrl() ? false : $(target);
o._current.tab = tab;
o._current.frame = frame;
}
}
}
if (!o._current.tab && o.openTarget !== false) {
tab = element.find("a[href='"+ o.openTarget+"']");
if (tab) {
target = tab.attr('href');
frame = target && target.isUrl() ? false : $(target);
o._current.tab = tab;
o._current.frame = frame;
}
}
if (!o._current.tab) {
$.each(tabs, function (i, v) {
var tab = $(v), target = tab.attr('href'), frame = target.isUrl() ? false : $(target);
if (tab.parent().hasClass('active') && !tab.parent().hasClass('disabled') && frame !== false) {
o._current.tab = tab;
o._current.frame = frame;
}
});
}
if (!o._current.tab) {
for(var i = 0; i < tabs.length; i++) {
if (!$(tabs[i]).attr('href').isUrl() && !$(tabs[i]).parent().hasClass('disabled')) {
o._current.tab = $(tabs[i]);
o._current.frame = $($(tabs[i]).attr('href'));
break;
}
}
}
this._createEvents();
this._openTab();
//this._hideTabs();
//
//$(window).on('resize', function(){
// that._hideTabs();
//});
element.data('tabcontrol', this);
},
_hideTabs: function(){
var element = this.element;
var w = element.outerWidth();
var _tabs = element.children('.tabs').find('li:not(.non-visible-tabs)');
var _nvt = element.children('.tabs').find('.non-visible-tabs').children('.d-menu');
$.each(_tabs, function(){
var $tab = $(this), tab = this;
if (tab.offsetLeft + tab.offsetWidth + 30 > w) {
var new_tab = $tab.clone(true);
new_tab.appendTo(_nvt);
$tab.remove();
}
});
},
_openTab: function(){
var element = this.element, o = this.options;
var tabs = element.children('.tabs').find('li').children('a');
var frames = element.children('.frames').children('div');
tabs.parent().removeClass('active');
frames.hide();
o._current.tab.parent().addClass('active');
o._current.frame.show();
if (o.saveState && element.attr('id') !== undefined && element.attr('id').trim() !== '') {
window.localStorage.setItem(element.attr('id')+"-stored-tab", o._current.tab.attr('href'));
}
},
_createEvents: function(){
var that = this, element = this.element, o = this.options;
var tabs = element.children('.tabs').find('li').children('a');
var frames = element.children('.frames').children('div');
element.on('click', '.tabs > li > a', function(e){
var result;
var tab = $(this), target = tab.attr('href'), frame = $(target);
if (tab.parent().hasClass('disabled')) {return false;}
if (typeof o.onTabClick === 'function') {
if (!o.onTabClick(tab)) {return false;}
} else {
if (typeof window[o.onTabClick] === 'function') {
if (!window[o.onTabClick](tab)) {return false;}
} else {
result = eval("(function(){"+o.onTabClick+"})");
if (!result.call(tab)) {return false;}
}
}
if (target.isUrl()) {
window.location.href = target;
return true;
}
o._current.tab = tab;
o._current.frame = frame;
that._openTab();
if (typeof o.onTabChange === 'function') {
o.onTabChange(tab);
} else {
if (typeof window[o.onTabChange] === 'function') {
window[o.onTabChange](tab);
} else {
result = eval("(function(){"+o.onTabChange+"})");
result.call(tab);
}
}
e.preventDefault();
e.stopPropagation();
});
},
hideTab: function(tab){
},
showTab: function(tab){
},
_destroy: function () {
},
_setOption: function ( key, value ) {
this._super('_setOption', key, value);
}
});