aboutsummaryrefslogtreecommitdiffstats
path: root/webclient/lib/jquery.tabs.js
diff options
context:
space:
mode:
authorZaran <zaran.krleza@gmail.com>2011-05-12 01:37:39 +0200
committerZaran <zaran.krleza@gmail.com>2011-05-12 01:37:39 +0200
commit02a4212494e1d42f50d8fb1c8daede32ae9cb744 (patch)
treed2268e0bdc7bab4063e8b23fa9b07852bb7a52b8 /webclient/lib/jquery.tabs.js
parent9901679f2bc1e6972b6ec5d354a54814fba097eb (diff)
downloadalias-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.js121
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