All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.scripts.vendor.plugins.ui.jquery.collapsible.min.js Maven / Gradle / Ivy

/**
 * Collapsible, jQuery Plugin
 *
 * This plugin enables the management of
 * collapsibles on the page with cookie support.
 *
 * Copyright (c) 2010 John Snyder (snyderplace.com)
 * @license http://www.snyderplace.com/collapsible/license.txt New BSD
 * @version 1.1
 */
(function ( $ ) {
	$.fn.collapsible = function ( cmd, arg ) {
		if ( typeof cmd == 'string' ) {
			return $.fn.collapsible.dispatcher[cmd]( this, arg );
		}
		return $.fn.collapsible.dispatcher['_create']( this, cmd );
	};
	$.fn.collapsible.dispatcher = {_create: function ( obj, arg ) {
		createCollapsible( obj, arg );
	}, toggle: function ( obj ) {
		toggle( obj, loadOpts( obj ) );
		return obj;
	}, open: function ( obj ) {
		open( obj, loadOpts( obj ) );
		return obj;
	}, close: function ( obj ) {
		close( obj, loadOpts( obj ) );
		return obj;
	}, collapsed: function ( obj ) {
		return collapsed( obj, loadOpts( obj ) );
	}};
	function createCollapsible( obj, options ) {
		var opts = $.extend( {}, $.fn.collapsible.defaults, options );
		var opened = new Array();
		obj.each( function () {
			var $this = $( this );
			saveOpts( $this, opts );
			if ( opts.bind == 'mouseenter' ) {
				$this.bind( 'mouseenter', function ( e ) {
					e.preventDefault();
					toggle( $this, opts );
				} );
			}
			if ( opts.bind == 'mouseover' ) {
				$this.bind( 'mouseover', function ( e ) {
					e.preventDefault();
					toggle( $this, opts );
				} );
			}
			if ( opts.bind == 'click' ) {
				$this.bind( 'click', function ( e ) {
					e.preventDefault();
					toggle( $this, opts );
				} );
			}
			if ( opts.bind == 'dblclick' ) {
				$this.bind( 'dblclick', function ( e ) {
					e.preventDefault();
					toggle( $this, opts );
				} );
			}
			id = $this.attr( 'id' );
			if ( !useCookies( opts ) ) {
				dOpenIndex = inDefaultOpen( id, opts );
				if ( dOpenIndex === false ) {
					$this.addClass( opts.cssClose );
					$this.next().hide();
				} else {
					$this.addClass( opts.cssOpen );
					$this.next().show();
					opened.push( id );
				}
			} else {
				if ( issetCookie( opts ) ) {
					cookieIndex = inCookie( id, opts );
					if ( cookieIndex === false ) {
						$this.addClass( opts.cssClose );
						$this.next().hide();
					} else {
						$this.addClass( opts.cssOpen );
						$this.next().show();
						opened.push( id );
					}
				} else {
					dOpenIndex = inDefaultOpen( id, opts );
					if ( dOpenIndex === false ) {
						$this.addClass( opts.cssClose );
						$this.next().hide();
					} else {
						$this.addClass( opts.cssOpen );
						$this.next().show();
						opened.push( id );
					}
				}
			}
		} );
		if ( opened.length > 0 && useCookies( opts ) ) {
			setCookie( opened.toString(), opts );
		} else {
			setCookie( '', opts );
		}
		return obj;
	};
	function loadOpts( $this ) {
		return $this.data( 'collapsible-opts' );
	}

	function saveOpts( $this, opts ) {
		return $this.data( 'collapsible-opts', opts );
	}

	function collapsed( $this, opts ) {
		return $this.hasClass( opts.cssClose );
	}

	function close( $this, opts ) {
		$this.addClass( opts.cssClose ).removeClass( opts.cssOpen );
		opts.animateOpen( $this, opts );
		if ( useCookies( opts ) ) {
			id = $this.attr( 'id' );
			unsetCookieId( id, opts );
		}
	}

	function open( $this, opts ) {
		$this.removeClass( opts.cssClose ).addClass( opts.cssOpen );
		opts.animateClose( $this, opts );
		if ( useCookies( opts ) ) {
			id = $this.attr( 'id' );
			appendCookie( id, opts );
		}
	}

	function toggle( $this, opts ) {
		if ( collapsed( $this, opts ) ) {
			open( $this, opts );
		} else {
			close( $this, opts );
		}
		return false;
	}

	function useCookies( opts ) {
		if ( !$.cookie || opts.cookieName == '' ) {
			return false;
		}
		return true;
	}

	function appendCookie( value, opts ) {
		if ( !useCookies( opts ) ) {
			return false;
		}
		if ( !issetCookie( opts ) ) {
			setCookie( value, opts );
			return true;
		}
		if ( inCookie( value, opts ) ) {
			return true;
		}
		cookie = $.cookie( opts.cookieName );
		cookie = unescape( cookie );
		cookieArray = cookie.split( ',' );
		cookieArray.push( value );
		setCookie( cookieArray.toString(), opts );
		return true;
	}

	function unsetCookieId( value, opts ) {
		if ( !useCookies( opts ) ) {
			return false;
		}
		if ( !issetCookie( opts ) ) {
			return true;
		}
		cookieIndex = inCookie( value, opts );
		if ( cookieIndex === false ) {
			return true;
		}
		cookie = $.cookie( opts.cookieName );
		cookie = unescape( cookie );
		cookieArray = cookie.split( ',' );
		cookieArray.splice( cookieIndex, 1 );
		setCookie( cookieArray.toString(), opts );
	}

	function setCookie( value, opts ) {
		if ( !useCookies( opts ) ) {
			return false;
		}
		$.cookie( opts.cookieName, value, opts.cookieOptions );
	}

	function inCookie( value, opts ) {
		if ( !useCookies( opts ) ) {
			return false;
		}
		if ( !issetCookie( opts ) ) {
			return false;
		}
		cookie = unescape( $.cookie( opts.cookieName ) );
		cookieArray = cookie.split( ',' );
		cookieIndex = $.inArray( value, cookieArray );
		if ( cookieIndex == -1 ) {
			return false;
		}
		return cookieIndex;
	}

	function issetCookie( opts ) {
		if ( !useCookies( opts ) ) {
			return false;
		}
		if ( $.cookie( opts.cookieName ) == null ) {
			return false;
		}
		return true;
	}

	function inDefaultOpen( id, opts ) {
		defaultOpen = getDefaultOpen( opts );
		index = $.inArray( id, defaultOpen );
		if ( index == -1 ) {
			return false;
		}
		return index;
	}

	function getDefaultOpen( opts ) {
		defaultOpen = new Array();
		if ( opts.defaultOpen != '' ) {
			defaultOpen = opts.defaultOpen.split( ',' );
		}
		return defaultOpen;
	}

	$.fn.collapsible.defaults = {cssClose: 'collapse-close', cssOpen: 'collapse-open', cookieName: 'collapsible', cookieOptions: {path: '/', expires: 7, domain: '', secure: ''}, defaultOpen: '', speed: 'slow', bind: 'click', animateOpen: function ( elem, opts ) {
		elem.next().slideUp( opts.speed );
	}, animateClose: function ( elem, opts ) {
		elem.next().slideDown( opts.speed );
	}};
})( jQuery );




© 2015 - 2024 Weber Informatics LLC | Privacy Policy