70% OFF : CLICK HERE TO BUY IT TODAY FOR ONLY $44.70 OR GET IT FREE VIA TRIALPAY  

PHP Demo Application - Source Code

/Framework/Model/Vendor/jquery-ui/development-bundle/ui/jquery.ui.tabs.js



/*
 * jQuery UI Tabs 1.8.4
 *
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *    jquery.ui.core.js
 *    jquery.ui.widget.js
 */
(function( $, undefined ) {
	var tabId 0,
	    listId 0;
	function getNextTabId() {
		    return ++tabId;
		}
	function getNextListId() {
		    return ++listId;
		}
	$.widget"ui.tabs", {
		    options: {
			        addnull,
			        ajaxOptionsnull,
			        cachefalse,
			        cookienull// e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true
				}
			        collapsiblefalse,
			        disablenull,
			        disabled[],
			        enablenull,
			        event"click",
			        fxnull// e.g. { height: 'toggle', opacity: 'toggle', duration: 200
				}
			        idPrefix"ui-tabs-",
			        loadnull,
			        panelTemplate"<div></div>",
			        removenull,
			        selectnull,
			        shownull,
			        spinner"<em>Loading&#8230;
			</em>",
			        tabTemplate"<li><a href='#{href}'><span>#{label}</span></a></li>"
			    },
		    _create: function() {
			        this._tabifytrue );
			    },
		    _setOption: function( keyvalue ) {
			        if ( key == "selected" ) {
				            if (this.options.collapsible && value == this.options.selected ) {
					                return;
					            }
				            this.selectvalue );
				        } else {
				            this.optionskey ] = value;
				            this._tabify();
				        }
			    },
		    _tabId: function( ) {
			        return a.title && a.title.replace( /\s/g"_" ).replace( /[^A-Za-z0-9\-_:\.]/g"" ) ||
			            this.options.idPrefix getNextTabId();
			    },
		    _sanitizeSelector: function( hash ) {
			        // we need this because an id may contain a ":"
			        return hash.replace( /:/g"\\:" );
			    },
		    _cookie: function() {
			        var cookie this.cookie ||
			            ( this.cookie this.options.cookie.name || "ui-tabs-" getNextListId() );
			        return $.cookie.applynull, [ cookie ].concat( $.makeArrayarguments ) ) );
			    },
		    _ui: function( tabpanel ) {
			        return {
				            tabtab,
				            panelpanel,
				            indexthis.anchors.indextab )
				        };
			    },
		    _cleanup: function() {
			        // restore all former loading tabs labels
			        this.lis.filter".ui-state-processing" )
			            .removeClass"ui-state-processing" )
			            .find"span:data(label.tabs)" )
			                .each(function() {
				                    var el = $( this );
				                    el.htmlel.data"label.tabs" ) ).removeData"label.tabs" );
				                });
			    },
		    _tabify: function( init ) {
			        var self this,
			            this.options,
			            fragmentId = /^#.+/;
			 // Safari 2 reports '#' for an empty hash
			        this.list = this.element.find"ol,ul" ).eq);
			        this.lis = $( "li:has(a[href])"this.list );
			        this.anchors this.lis.map(function() {
				            return $( "a"this )[ ];
				        });
			        this.panels = $( [] );
			        this.anchors.each(function( i) {
				            var href = $( ).attr"href" );
				            // For dynamically created HTML that contains a hash as href IE < 8 expands
				            // such href to the full page url with hash and then misinterprets tab as ajax.
				            // Same consideration applies for an added tab with a fragment identifier
				            // since a[href=#fragment-identifier] does unexpectedly not match.
				            // Thus normalize href attribute...
				            var hrefBase href.split"#" )[ ],
				                baseEl;
				            if ( hrefBase && ( hrefBase === location.toString().split"#" )[ ] ||
				                    ( baseEl = $( "base" )[ ]) && hrefBase === baseEl.href ) ) {
					                href a.hash;
					                a.href href;
					            }
				            // inline tab
				            if ( fragmentId.testhref ) ) {
					                self.panels self.panels.addself._sanitizeSelectorhref ) );
					            // remote tab
					            // prevent loading the page itself if href is just "#"
					            } else if ( href !== "#" ) {
					                // required for restore on destroy
					                $.dataa"href.tabs"href );
					                // TODO until #3808 is fixed strip fragment identifier from url
					                // (IE fails to load from such url)
					                $.dataa"load.tabs"href.replace( /#.*$/, "" ) );
					                var id self._tabId);
					                a.href "#" id;
					                var $panel = $( "#" id );
					                if ( !$panel.length ) {
						                    $panel = $( o.panelTemplate )
						                        .attr"id"id )
						                        .addClass"ui-tabs-panel ui-widget-content ui-corner-bottom" )
						                        .insertAfterself.panels] || self.list );
						                    $panel.data"destroy.tabs"true );
						                }
					                self.panels self.panels.add$panel );
					            // invalid tab href
					            } else {
					                o.disabled.push);
					            }
				        });
			        // initialization from scratch
			        if ( init ) {
				            // attach necessary classes for styling
				            this.element.addClass"ui-tabs ui-widget ui-widget-content ui-corner-all" );
				            this.list.addClass"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
				            this.lis.addClass"ui-state-default ui-corner-top" );
				            this.panels.addClass"ui-tabs-panel ui-widget-content ui-corner-bottom" );
				            // Selected tab
				            // use "selected" option or try to retrieve:
				            // 1. from fragment identifier in url
				            // 2. from cookie
				            // 3. from selected class attribute on <li>
				            if ( o.selected === undefined ) {
					                if ( location.hash ) {
						                    this.anchors.each(function( i) {
							                        if ( a.hash == location.hash ) {
								                            o.selected i;
								                            return false;
								                        }
							                    });
						                }
					                if ( typeof o.selected !== "number" && o.cookie ) {
						                    o.selected parseIntself._cookie(), 10 );
						                }
					                if ( typeof o.selected !== "number" && this.lis.filter".ui-tabs-selected" ).length ) {
						                    o.selected this.lis.indexthis.lis.filter".ui-tabs-selected" ) );
						                }
					                o.selected o.selected || ( this.lis.length : -);
					            } else if ( o.selected === null ) {
					// usage of null is deprecated, TODO remove in next release
					                o.selected = -1;
					            }
				            // sanity check - default to first tab...
				            o.selected = ( ( o.selected >= && this.anchorso.selected ] ) || o.selected )
				                ? o.selected
				                0;
				            // Take disabling tabs via class attribute from HTML
				            // into account and update option properly.
				            // A selected tab cannot become disabled.
				            o.disabled = $.uniqueo.disabled.concat(
				                $.mapthis.lis.filter".ui-state-disabled" ), function( n) {
					                    return self.lis.index);
					                })
				            ) ).sort();
				            if ( $.inArrayo.selectedo.disabled ) != -) {
					                o.disabled.splice( $.inArrayo.selectedo.disabled ), );
					            }
				            // highlight selected tab
				            this.panels.addClass"ui-tabs-hide" );
				            this.lis.removeClass"ui-tabs-selected ui-state-active" );
				            // check for length avoids error when initializing empty list
				            if ( o.selected >= && this.anchors.length ) {
					                this.panels.eqo.selected ).removeClass"ui-tabs-hide" );
					                this.lis.eqo.selected ).addClass"ui-tabs-selected ui-state-active" );
					                // seems to be expected behavior that the show callback is fired
					                self.element.queue"tabs", function() {
						                    self._trigger"show"null,
						                        self._uiself.anchorso.selected ], self.panelso.selected ] ) );
						                });
					                this.loado.selected );
					            }
				            // clean up to avoid memory leaks in certain versions of IE 6
				            // TODO: namespace this event
				            $( window ).bind"unload", function() {
					                self.lis.addself.anchors ).unbind".tabs" );
					                self.lis self.anchors self.panels null;
					            });
				        // update selected after add/remove
				        } else {
				            o.selected this.lis.indexthis.lis.filter".ui-tabs-selected" ) );
				        }
			        // update collapsible
			        // TODO: use .toggleClass()
			        this.elemento.collapsible "addClass" "removeClass" ]( "ui-tabs-collapsible" );
			        // set or update cookie after init and add/remove respectively
			        if ( o.cookie ) {
				            this._cookieo.selectedo.cookie );
				        }
			        // disable tabs
			        for ( var 0li;
			 ( li this.lis] );
			 i++ ) {
				            $( li )[ $.inArrayio.disabled ) != -&&
				                // TODO: use .toggleClass()
				                !$( li ).hasClass"ui-tabs-selected" ) ? "addClass" "removeClass" ]( "ui-state-disabled" );
				        }
			        // reset cache if switching from cached to not cached
			        if ( o.cache === false ) {
				            this.anchors.removeData"cache.tabs" );
				        }
			        // remove all handlers before, tabify may run on existing tabs after add or option change
			        this.lis.addthis.anchors ).unbind".tabs" );
			        if ( o.event !== "mouseover" ) {
				            var addState = function( stateel ) {
					                if ( el.is":not(.ui-state-disabled)" ) ) {
						                    el.addClass"ui-state-" state );
						                }
					            };
				            var removeState = function( stateel ) {
					                el.removeClass"ui-state-" state );
					            };
				            this.lis.bind"mouseover.tabs" , function() {
					                addState"hover", $( this ) );
					            });
				            this.lis.bind"mouseout.tabs", function() {
					                removeState"hover", $( this ) );
					            });
				            this.anchors.bind"focus.tabs", function() {
					                addState"focus", $( this ).closest"li" ) );
					            });
				            this.anchors.bind"blur.tabs", function() {
					                removeState"focus", $( this ).closest"li" ) );
					            });
				        }
			        // set up animations
			        var hideFxshowFx;
			        if ( o.fx ) {
				            if ( $.isArrayo.fx ) ) {
					                hideFx o.fx];
					                showFx o.fx];
					            } else {
					                hideFx showFx o.fx;
					            }
				        }
			        // Reset certain styles left over from animation
			        // and prevent IE's ClearType bug...
			        function resetStyle$elfx ) {
				            $el.css"display""" );
				            if ( !$.support.opacity && fx.opacity ) {
					                $el].style.removeAttribute"filter" );
					            }
				        }
			        // Show a tab...
			        var showTab showFx
			            ? function( clicked$show ) {
				                $( clicked ).closest"li" ).addClass"ui-tabs-selected ui-state-active" );
				                $show.hide().removeClass"ui-tabs-hide" // avoid flicker that way
				                    .animateshowFxshowFx.duration || "normal", function() {
					                        resetStyle$showshowFx );
					                        self._trigger"show"nullself._uiclicked$show] ) );
					                    });
				            }
			            : function( clicked$show ) {
				                $( clicked ).closest"li" ).addClass"ui-tabs-selected ui-state-active" );
				                $show.removeClass"ui-tabs-hide" );
				                self._trigger"show"nullself._uiclicked$show] ) );
				            };
			        // Hide a tab, $show is optional...
			        var hideTab hideFx
			            ? function( clicked$hide ) {
				                $hide.animatehideFxhideFx.duration || "normal", function() {
					                    self.lis.removeClass"ui-tabs-selected ui-state-active" );
					                    $hide.addClass"ui-tabs-hide" );
					                    resetStyle$hidehideFx );
					                    self.element.dequeue"tabs" );
					                });
				            }
			            : function( clicked$hide$show ) {
				                self.lis.removeClass"ui-tabs-selected ui-state-active" );
				                $hide.addClass"ui-tabs-hide" );
				                self.element.dequeue"tabs" );
				            };
			        // attach tab event handler, unbind to avoid duplicates from former tabifying...
			        this.anchors.bindo.event ".tabs", function() {
				            var el this,
				                $li = $(el).closest"li" ),
				                $hide self.panels.filter":not(.ui-tabs-hide)" ),
				                $show = $( self._sanitizeSelectorel.hash ) );
				            // If tab is already selected and not collapsible or tab disabled or
				            // or is already loading or click callback returns false stop here.
				            // Check if click handler returns false last so that it is not executed
				            // for a disabled or loading tab!
				            if ( ( $li.hasClass"ui-tabs-selected" ) && !o.collapsible) ||
				                $li.hasClass"ui-state-disabled" ) ||
				                $li.hasClass"ui-state-processing" ) ||
				                self._trigger"select"nullself._uithis$show] ) ) === false ) {
					                this.blur();
					                return false;
					            }
				            o.selected self.anchors.indexthis );
				            self.abort();
				            // if tab may be closed
				            if ( o.collapsible ) {
					                if ( $li.hasClass"ui-tabs-selected" ) ) {
						                    o.selected = -1;
						                    if ( o.cookie ) {
							                        self._cookieo.selectedo.cookie );
							                    }
						                    self.element.queue"tabs", function() {
							                        hideTabel$hide );
							                    }).dequeue"tabs" );
						                    this.blur();
						                    return false;
						                } else if ( !$hide.length ) {
						                    if ( o.cookie ) {
							                        self._cookieo.selectedo.cookie );
							                    }
						                    self.element.queue"tabs", function() {
							                        showTabel$show );
							                    });
						                    // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
						                    self.loadself.anchors.indexthis ) );
						                    this.blur();
						                    return false;
						                }
					            }
				            if ( o.cookie ) {
					                self._cookieo.selectedo.cookie );
					            }
				            // show new tab
				            if ( $show.length ) {
					                if ( $hide.length ) {
						                    self.element.queue"tabs", function() {
							                        hideTabel$hide );
							                    });
						                }
					                self.element.queue"tabs", function() {
						                    showTabel$show );
						                });
					                self.loadself.anchors.indexthis ) );
					            } else {
					                throw "jQuery UI Tabs: Mismatching fragment identifier.";
					            }
				            // Prevent IE from keeping other link focussed when using the back button
				            // and remove dotted border from clicked link. This is controlled via CSS
				            // in modern browsers;
				 blur() removes focus from address bar in Firefox
				            // which can become a usability and annoying problem with tabs('rotate').
				            if ( $.browser.msie ) {
					                this.blur();
					            }
				        });
			        // disable click in any case
			        this.anchors.bind"click.tabs", function(){
				            return false;
				        });
			    },
		    _getIndex: function( index ) {
			        // meta-function to give users option to provide a href string instead of a numerical index.
			        // also sanitizes numerical indexes to valid values.
			        if ( typeof index == "string" ) {
				            index this.anchors.indexthis.anchors.filter"[href$=" index "]" ) );
				        }
			        return index;
			    },
		    destroy: function() {
			        var this.options;
			        this.abort();
			        this.element
			            .unbind".tabs" )
			            .removeClass"ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" )
			            .removeData"tabs" );
			        this.list.removeClass"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
			        this.anchors.each(function() {
				            var href = $.datathis"href.tabs" );
				            if ( href ) {
					                this.href href;
					            }
				            var $this = $( this ).unbind".tabs" );
				            $.each( [ "href""load""cache" ], function( iprefix ) {
					                $this.removeDataprefix ".tabs" );
					            });
				        });
			        this.lis.unbind".tabs" ).addthis.panels ).each(function() {
				            if ( $.datathis"destroy.tabs" ) ) {
					                $( this ).remove();
					            } else {
					                $( this ).removeClass([
					                    "ui-state-default",
					                    "ui-corner-top",
					                    "ui-tabs-selected",
					                    "ui-state-active",
					                    "ui-state-hover",
					                    "ui-state-focus",
					                    "ui-state-disabled",
					                    "ui-tabs-panel",
					                    "ui-widget-content",
					                    "ui-corner-bottom",
					                    "ui-tabs-hide"
					                ].join" " ) );
					            }
				        });
			        if ( o.cookie ) {
				            this._cookienullo.cookie );
				        }
			        return this;
			    },
		    add: function( urllabelindex ) {
			        if ( index === undefined ) {
				            index this.anchors.length;
				        }
			        var self this,
			            this.options,
			            $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ),
			            id = !url.indexOf"#" ) ? url.replace"#""" ) : this._tabId( $( "a"$li )[ ] );
			        $li.addClass"ui-state-default ui-corner-top" ).data"destroy.tabs"true );
			        // try to find an existing element before creating a new one
			        var $panel = $( "#" id );
			        if ( !$panel.length ) {
				            $panel = $( o.panelTemplate )
				                .attr"id"id )
				                .data"destroy.tabs"true );
				        }
			        $panel.addClass"ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );
			        if ( index >= this.lis.length ) {
				            $li.appendTothis.list );
				            $panel.appendTothis.list[ ].parentNode );
				        } else {
				            $li.insertBeforethis.lisindex ] );
				            $panel.insertBeforethis.panelsindex ] );
				        }
			        o.disabled = $.mapo.disabled, function( n) {
				            return >= index ? ++n;
				        });
			        this._tabify();
			        if ( this.anchors.length == ) {
				            o.selected 0;
				            $li.addClass"ui-tabs-selected ui-state-active" );
				            $panel.removeClass"ui-tabs-hide" );
				            this.element.queue"tabs", function() {
					                self._trigger"show"nullself._uiself.anchors], self.panels] ) );
					            });
				            this.load);
				        }
			        this._trigger"add"nullthis._uithis.anchorsindex ], this.panelsindex ] ) );
			        return this;
			    },
		    remove: function( index ) {
			        index this._getIndexindex );
			        var this.options,
			            $li this.lis.eqindex ).remove(),
			            $panel this.panels.eqindex ).remove();
			        // If selected tab was removed focus tab to the right or
			        // in case the last tab was removed the tab to the left.
			        if ( $li.hasClass"ui-tabs-selected" ) && this.anchors.length 1) {
				            this.selectindex + ( index this.anchors.length : -) );
				        }
			        o.disabled = $.map(
			            $.grepo.disabled, function(ni) {
				                return != index;
				            }),
			            function( n) {
				                return >= index ? --n;
				            });
			        this._tabify();
			        this._trigger"remove"nullthis._ui$li.find"a" )[ ], $panel] ) );
			        return this;
			    },
		    enable: function( index ) {
			        index this._getIndexindex );
			        var this.options;
			        if ( $.inArrayindexo.disabled ) == -) {
				            return;
				        }
			        this.lis.eqindex ).removeClass"ui-state-disabled" );
			        o.disabled = $.grepo.disabled, function( n) {
				            return != index;
				        });
			        this._trigger"enable"nullthis._uithis.anchorsindex ], this.panelsindex ] ) );
			        return this;
			    },
		    disable: function( index ) {
			        index this._getIndexindex );
			        var self thisthis.options;
			        // cannot disable already selected tab
			        if ( index != o.selected ) {
				            this.lis.eqindex ).addClass"ui-state-disabled" );
				            o.disabled.pushindex );
				            o.disabled.sort();
				            this._trigger"disable"nullthis._uithis.anchorsindex ], this.panelsindex ] ) );
				        }
			        return this;
			    },
		    select: function( index ) {
			        index this._getIndexindex );
			        if ( index == -) {
				            if ( this.options.collapsible && this.options.selected != -) {
					                index this.options.selected;
					            } else {
					                return this;
					            }
				        }
			        this.anchors.eqindex ).triggerthis.options.event ".tabs" );
			        return this;
			    },
		    load: function( index¬†) {
			        index this._getIndexindex );
			        var self this,
			            this.options,
			            this.anchors.eqindex )[ ],
			            url = $.dataa"load.tabs" );
			        this.abort();
			        // not remote or from cache
			        if ( !url || this.element.queue"tabs" ).length !== && $.dataa"cache.tabs" ) ) {
				            this.element.dequeue"tabs" );
				            return;
				        }
			        // load remote from here on
			        this.lis.eqindex ).addClass"ui-state-processing" );
			        if ( o.spinner ) {
				            var span = $( "span");
				            span.data"label.tabs"span.html() ).htmlo.spinner );
				        }
			        this.xhr = $.ajax( $.extend{}o.ajaxOptions, {
				            urlurl,
				            success: function( r) {
					                $( self._sanitizeSelectora.hash ) ).html);
					                // take care of tab labels
					                self._cleanup();
					                if ( o.cache ) {
						                    $.dataa"cache.tabs"true );
						                }
					                self._trigger"load"nullself._uiself.anchorsindex ], self.panelsindex ] ) );
					                try {
						                    o.ajaxOptions.successr);
						                }
					                catch ( {}
					            },
				            error: function( xhrs) {
					                // take care of tab labels
					                self._cleanup();
					                self._trigger"load"nullself._uiself.anchorsindex ], self.panelsindex ] ) );
					                try {
						                    // Passing index avoid a race condition when this method is
						                    // called after the user has selected another tab.
						                    // Pass the anchor that initiated this request allows
						                    // loadError to manipulate the tab content panel via $(a.hash)
						                    o.ajaxOptions.errorxhrsindex);
						                }
					                catch ( {}
					            }
				        } ) );
			        // last, so that load event is fired before show...
			        self.element.dequeue"tabs" );
			        return this;
			    },
		    abort: function() {
			        // stop possibly running animations
			        this.element.queue[] );
			        this.panels.stopfalsetrue );
			        // "tabs" queue must not contain more than two elements,
			        // which are the callbacks for the latest clicked tab...
			        this.element.queue"tabs"this.element.queue"tabs" ).splice( -2) );
			        // terminate pending requests from other tabs
			        if ( this.xhr ) {
				            this.xhr.abort();
				            delete this.xhr;
				        }
			        // take care of tab labels
			        this._cleanup();
			        return this;
			    },
		    url: function( indexurl ) {
			        this.anchors.eqindex ).removeData"cache.tabs" ).data"load.tabs"url );
			        return this;
			    },
		    length: function() {
			        return this.anchors.length;
			    }
		});
	$.extend( $.ui.tabs, {
		    version"1.8.4"
		});
	/*
	 * Tabs Extensions
	 */
	/*
	 * Rotate
	 */
	$.extend( $.ui.tabs.prototype, {
		    rotationnull,
		    rotate: function( mscontinuing ) {
			        var self this,
			            this.options;
			        var rotate self._rotate || ( self._rotate = function( ) {
				            clearTimeoutself.rotation );
				            self.rotation setTimeout(function() {
					                var o.selected;
					                self.select( ++self.anchors.length );
					            }, ms );
				            if ( ) {
					                e.stopPropagation();
					            }
				        });
			        var stop self._unrotate || ( self._unrotate = !continuing
			            ? function(e) {
				                if (e.clientX) {
					// in case of a true click
					                    self.rotate(null);
					                }
				            }
			            : function( ) {
				                o.selected;
				                rotate();
				            });
			        // start rotation
			        if ( ms ) {
				            this.element.bind"tabsshow"rotate );
				            this.anchors.bindo.event ".tabs"stop );
				            rotate();
				        // stop rotation
				        } else {
				            clearTimeoutself.rotation );
				            this.element.unbind"tabsshow"rotate );
				            this.anchors.unbindo.event ".tabs"stop );
				            delete this._rotate;
				            delete this._unrotate;
				        }
			        return this;
			    }
		});
	})( jQuery );





PHP Demo Source Code Index