From 02a4212494e1d42f50d8fb1c8daede32ae9cb744 Mon Sep 17 00:00:00 2001 From: Zaran Date: Thu, 12 May 2011 01:37:39 +0200 Subject: * Split the js code and css code into several files for easier coding (they will be minified and concatenated in deployment anyway) * Add a light tooltip jquery plugin. Simple tooltip test on roster contacts * Some css changes (WIP) * Some documentation cleanup in js --- webclient/lib/jquery.tabs.js | 121 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 webclient/lib/jquery.tabs.js (limited to 'webclient/lib/jquery.tabs.js') diff --git a/webclient/lib/jquery.tabs.js b/webclient/lib/jquery.tabs.js new file mode 100644 index 0000000..7898afa --- /dev/null +++ b/webclient/lib/jquery.tabs.js @@ -0,0 +1,121 @@ +/** + * Light jQuery tab plugin + * + * the html structure is: + * + *
+ * + *
+ * Content 1 + *
+ *
+ */ +(function( $ ){ + + var methods = { + + /** + * Initialise the general tab area + * @return this (to preserve chainability) + */ + init: function() { + var tabs = this; + this.find('ul.tabbar li').bind('click.tabs', function(event){ + event.preventDefault(); + tabs.tabs('select',$(this).find('a').attr('href')); + }); + this.data('tabs',{}); + return this; + }, + + /** + * Select a tab + * @param {String} id The tab id with # + * @return this + */ + select: function(id) { + var selectedId = this.data('tabs').selected; + + if ( selectedId == id) { + return this; + } + + this.find('ul.tabbar li a[href="' + selectedId + '"]').parent().removeClass('selected'); + this.find('ul.tabbar li a[href="' + id + '"]').parent().addClass('selected'); + $(selectedId).hide(); + $(id).show(); + this.data('tabs').selected = id; + return this; + }, + + /** + * Add a tab + * @param {String} name The tab Title + * @param {String} id The tab id without # + * @pram {Bool} remove Wether the tab should be closable + * return this + */ + add: function(name, id, remove) { + var tabs = this; + var li = $('
  • ' + name +'
  • '); + + if ( remove ) { + li.append(''); + li.find('.tab-close').bind('click', function() { + tabs.tabs('remove', '#'+id); + }); + } + + li.bind('click.tabs',function(event){ + event.preventDefault(); + tabs.tabs('select',$(this).find('a').attr('href')); + }); + $(this).find('ul.tabbar').append(li); + $(this).append('
    '); + return this; + }, + + /** + * Test if a tab exists + * @param {String} id The tab id with # + * @return {Bool} + */ + exist: function(id) { + return (this.find('ul.tabbar li a[href="' + id + '"]').length != 0); + }, + + /** + * Remove a tab + * @param {String} id The tab id with # + * @return this + */ + remove: function(id) { + this.find('ul.tabbar li a[href="' + id + '"]').parent().remove(); + $(id).remove(); + + if (this.data('tabs').selected == id) { + var first = this.find('ul.tabbar li:first a').attr('href'); + this.tabs('select', first); + } + } + }; + + /* + * Register the 'tabs' method to the jQuery objects + * the first argument of this method is the submethod + * you want to call + */ + $.fn.tabs = 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.tabs'); + } + }; + +})(jQuery); \ No newline at end of file -- cgit v1.2.3-70-g09d2