118 lines
3.0 KiB
JavaScript
118 lines
3.0 KiB
JavaScript
/*
|
|
* R&S Tabs - jQuery plug-in
|
|
*
|
|
* Copyright 2010, Darius Zylka
|
|
* MIT License (http://www.opensource.org/licenses/mit-license.php)
|
|
*
|
|
* Depends: jQuery 1.4.2+
|
|
*/
|
|
(function($) {
|
|
|
|
var defaults = {
|
|
'cssNamespace': 'rsTabs',
|
|
'position': 'left',
|
|
'cufon': false,
|
|
'ajax': {}
|
|
};
|
|
|
|
var methods = {
|
|
init : function(options) {
|
|
|
|
$.extend(defaults, options);
|
|
|
|
return this.each(function() {
|
|
|
|
var $this = $(this);
|
|
var data = $this.data('rsTabs');
|
|
|
|
if (!data) {
|
|
$(this).data('rsTabs', {
|
|
'target': $this
|
|
});
|
|
}
|
|
|
|
$this.addClass(defaults.cssNamespace);
|
|
|
|
var $header = $('<div />').addClass(defaults.cssNamespace + '_Header');
|
|
var $body = $('<div />').addClass(defaults.cssNamespace + '_Body');
|
|
|
|
$(this).children('div[title]').each(function() {
|
|
var $thisContent = $(this);
|
|
|
|
|
|
if (defaults.ajax[$thisContent.attr('id')]) {
|
|
$thisContent.addClass('isAjaxableRsTab');
|
|
}
|
|
|
|
var $tab = $('<div />')
|
|
.click(function() {
|
|
if (!$(this).hasClass(defaults.cssNamespace + '_HeaderTabActive')) {
|
|
$('.' + defaults.cssNamespace + '_HeaderTab', $this).removeClass(defaults.cssNamespace + '_HeaderTabActive');
|
|
$(this).addClass(defaults.cssNamespace + '_HeaderTabActive');
|
|
|
|
$('.' + defaults.cssNamespace + '_BodyElementActive', $this).removeClass(defaults.cssNamespace + '_BodyElementActive');
|
|
$(this).data('rsTabs').addClass(defaults.cssNamespace + '_BodyElementActive');
|
|
|
|
if (defaults.ajax[$thisContent.attr('id')]) {
|
|
$('.isAjaxableRsTab *').unbind();
|
|
$('.isAjaxableRsTab').empty();
|
|
defaults.ajax[$thisContent.attr('id')]($thisContent);
|
|
}
|
|
}
|
|
})
|
|
.addClass(defaults.cssNamespace + '_HeaderTab')
|
|
.css({
|
|
'float': defaults.position
|
|
})
|
|
.append('<span>' + $(this).attr('title') + '</span>')
|
|
.appendTo($header)
|
|
.attr('data-idrel', $thisContent.attr('id'))
|
|
;
|
|
|
|
$tab.data('rsTabs', $thisContent);
|
|
|
|
$thisContent.bind('error', function(e, msg) {
|
|
$('.error', $tab).remove();
|
|
$('<div />').addClass('error').html(msg).appendTo($tab);
|
|
});
|
|
|
|
$thisContent.addClass(defaults.cssNamespace + '_BodyElement').appendTo($body);
|
|
$thisContent.attr({
|
|
title: ''
|
|
});
|
|
});
|
|
|
|
$header.children(':first').addClass(defaults.cssNamespace + '_HeaderTabActive');
|
|
$body.children(':first').addClass(defaults.cssNamespace + '_BodyElementActive');
|
|
|
|
$body.prependTo($this);
|
|
$header.prependTo($this);
|
|
|
|
if (typeof defaults.cufon === 'object') {
|
|
Cufon.replace($header, defaults.cufon);
|
|
}
|
|
|
|
});
|
|
},
|
|
destroy : function() {
|
|
|
|
return this.each(function() {
|
|
});
|
|
}
|
|
};
|
|
|
|
|
|
$.fn.rsTabs = function(method) {
|
|
|
|
if (methods[method]) {
|
|
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
|
} else if (typeof method === 'object' || ! method) {
|
|
return methods.init.apply(this, arguments);
|
|
} else {
|
|
$.error('Method ' + method + ' does not exist on jQuery.rsTabs');
|
|
return false;
|
|
}
|
|
};
|
|
|
|
})( jQuery );
|