diff options
| author | Zaran <zaran.krleza@gmail.com> | 2011-05-12 01:37:39 +0200 |
|---|---|---|
| committer | Zaran <zaran.krleza@gmail.com> | 2011-05-12 01:37:39 +0200 |
| commit | 02a4212494e1d42f50d8fb1c8daede32ae9cb744 (patch) | |
| tree | d2268e0bdc7bab4063e8b23fa9b07852bb7a52b8 /webclient/lib/jquery.tabs.js | |
| parent | 9901679f2bc1e6972b6ec5d354a54814fba097eb (diff) | |
| download | alias-02a4212494e1d42f50d8fb1c8daede32ae9cb744.tar.gz | |
* 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
Diffstat (limited to 'webclient/lib/jquery.tabs.js')
| -rw-r--r-- | webclient/lib/jquery.tabs.js | 121 |
1 files changed, 121 insertions, 0 deletions
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: + * + * <div id="generalid"> + * <ul class="tabbar"> + * <li><a href="#tab-1">Title 1</a></li> + * </ul> + * <div id="tab-1"> + * Content 1 + * </div> + * </div> + */ +(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 = $('<li><a href="#' + id + '">' + name +'</a></li>'); + + if ( remove ) { + li.append('<span class="tab-close"/>'); + 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('<div class="tab" id="' + id + '"></div>'); + 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 |
