diff options
author | rvelices <rv-github@modusoptimus.com> | 2008-08-28 01:26:26 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2008-08-28 01:26:26 +0000 |
commit | 3a67845aaf128fe718b27a89635fb33810ba7e41 (patch) | |
tree | cc12790366983d2c7496bbbf5eb5de5ac2b3b6a8 /template-common/lib/ui/ui.accordion.js | |
parent | abb2f22b2e96a89a44ad9d36db3bf612c6f88b9f (diff) |
- removed and moved (from common to admin) some CSS rules
- upgraded jQuery and accordion to latest version (and reorganised a bit their location)
git-svn-id: http://piwigo.org/svn/trunk@2489 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r-- | template-common/lib/ui/ui.accordion.js (renamed from template-common/jquery.accordion.js) | 223 |
1 files changed, 103 insertions, 120 deletions
diff --git a/template-common/jquery.accordion.js b/template-common/lib/ui/ui.accordion.js index ffa0711a5..4df9edea9 100644 --- a/template-common/jquery.accordion.js +++ b/template-common/lib/ui/ui.accordion.js @@ -1,149 +1,128 @@ /* - * jQuery UI Accordion 1.6 + * jQuery UI Accordion * - * Copyright (c) 2007 Jörn Zaefferer + * Copyright (c) 2007, 2008 Jörn Zaefferer + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. * * http://docs.jquery.com/UI/Accordion * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id$ - * + * Depends: + * ui.core.js */ +(function($) { -;(function($) { - -// If the UI scope is not available, add it -$.ui = $.ui || {}; - -$.fn.extend({ - accordion: function(options, data) { - var args = Array.prototype.slice.call(arguments, 1); - - return this.each(function() { - if (typeof options == "string") { - var accordion = $.data(this, "ui-accordion"); - accordion[options].apply(accordion, args); - // INIT with optional options - } else if (!$(this).is(".ui-accordion")) - $.data(this, "ui-accordion", new $.ui.accordion(this, options)); - }); - }, - // deprecated, use accordion("activate", index) instead - activate: function(index) { - return this.accordion("activate", index); - } -}); - -$.ui.accordion = function(container, options) { - - // setup configuration - this.options = options = $.extend({}, $.ui.accordion.defaults, options); - this.element = container; - - $(container).addClass("ui-accordion"); - - if ( options.navigation ) { - var current = $(container).find("a").filter(options.navigationFilter); - if ( current.length ) { - if ( current.filter(options.header).length ) { - options.active = current; - } else { - options.active = current.parent().parent().prev(); - current.addClass("current"); +$.widget("ui.accordion", { + init: function() { + var options = this.options; + + if ( options.navigation ) { + var current = this.element.find("a").filter(options.navigationFilter); + if ( current.length ) { + if ( current.filter(options.header).length ) { + options.active = current; + } else { + options.active = current.parent().parent().prev(); + current.addClass("current"); + } } } - } - - // calculate active if not specified, using the first header - options.headers = $(container).find(options.header); - options.active = findActive(options.headers, options.active); - - if ( options.fillSpace ) { - var maxHeight = $(container).parent().height(); - options.headers.each(function() { - maxHeight -= $(this).outerHeight(); - }); - var maxPadding = 0; - options.headers.next().each(function() { - maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height()); - }).height(maxHeight - maxPadding); - } else if ( options.autoheight ) { - var maxHeight = 0; - options.headers.next().each(function() { - maxHeight = Math.max(maxHeight, $(this).outerHeight()); - }).height(maxHeight); - } - - options.headers - .not(options.active || "") - .next() - .hide(); - options.active.parent().andSelf().addClass(options.selectedClass); + + // calculate active if not specified, using the first header + options.headers = this.element.find(options.header); + options.active = findActive(options.headers, options.active); + + // IE7-/Win - Extra vertical space in Lists fixed + if ($.browser.msie) { + this.element.find('a').css('zoom', '1'); + } + + if (!this.element.hasClass("ui-accordion")) { + this.element.addClass("ui-accordion"); + $("<span class='ui-accordion-left'/>").insertBefore(options.headers); + $("<span class='ui-accordion-right'/>").appendTo(options.headers); + options.headers.addClass("ui-accordion-header").attr("tabindex", "0"); + } + + var maxHeight; + if ( options.fillSpace ) { + maxHeight = this.element.parent().height(); + options.headers.each(function() { + maxHeight -= $(this).outerHeight(); + }); + var maxPadding = 0; + options.headers.next().each(function() { + maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height()); + }).height(maxHeight - maxPadding); + } else if ( options.autoHeight ) { + maxHeight = 0; + options.headers.next().each(function() { + maxHeight = Math.max(maxHeight, $(this).outerHeight()); + }).height(maxHeight); + } - if (options.event) - $(container).bind((options.event) + ".ui-accordion", clickHandler); -}; - -$.ui.accordion.prototype = { + options.headers + .not(options.active || "") + .next() + .hide(); + options.active.parent().andSelf().addClass(options.selectedClass); + + if (options.event) { + this.element.bind((options.event) + ".accordion", clickHandler); + } + }, activate: function(index) { // call clickHandler with custom event - clickHandler.call(this.element, { + clickHandler.call(this.element[0], { target: findActive( this.options.headers, index )[0] }); }, - - enable: function() { - this.options.disabled = false; - }, - disable: function() { - this.options.disabled = true; - }, destroy: function() { this.options.headers.next().css("display", ""); - if ( this.options.fillSpace || this.options.autoheight ) { + if ( this.options.fillSpace || this.options.autoHeight ) { this.options.headers.next().css("height", ""); } - $.removeData(this.element, "ui-accordion"); - $(this.element).removeClass("ui-accordion").unbind(".ui-accordion"); + $.removeData(this.element[0], "accordion"); + this.element.removeClass("ui-accordion").unbind(".accordion"); } -} +}); function scopeCallback(callback, scope) { return function() { return callback.apply(scope, arguments); }; -} +}; function completed(cancel) { // if removed while animated data can be empty - if (!$.data(this, "ui-accordion")) + if (!$.data(this, "accordion")) { return; - var instance = $.data(this, "ui-accordion"); + } + + var instance = $.data(this, "accordion"); var options = instance.options; options.running = cancel ? 0 : --options.running; - if ( options.running ) + if ( options.running ) { return; + } if ( options.clearStyle ) { options.toShow.add(options.toHide).css({ height: "", overflow: "" }); } - $(this).triggerHandler("change.ui-accordion", [options.data], options.change); + instance.trigger('change', null, options.data); } function toggle(toShow, toHide, data, clickedActive, down) { - var options = $.data(this, "ui-accordion").options; + var options = $.data(this, "accordion").options; options.toShow = toShow; options.toHide = toHide; options.data = data; var complete = scopeCallback(completed, this); // count elements to animate - options.running = toHide.size() == 0 ? toShow.size() : toHide.size(); + options.running = toHide.size() === 0 ? toShow.size() : toHide.size(); if ( options.animated ) { if ( !options.alwaysOpen && clickedActive ) { @@ -152,7 +131,7 @@ function toggle(toShow, toHide, data, clickedActive, down) { toHide: toHide, complete: complete, down: down, - autoheight: options.autoheight + autoHeight: options.autoHeight }); } else { $.ui.accordion.animations[options.animated]({ @@ -160,7 +139,7 @@ function toggle(toShow, toHide, data, clickedActive, down) { toHide: toHide, complete: complete, down: down, - autoheight: options.autoheight + autoHeight: options.autoHeight }); } } else { @@ -175,23 +154,23 @@ function toggle(toShow, toHide, data, clickedActive, down) { } function clickHandler(event) { - var options = $.data(this, "ui-accordion").options; - if (options.disabled) + var options = $.data(this, "accordion").options; + if (options.disabled) { return false; + } // called only when using activate(false) to close all parts programmatically if ( !event.target && !options.alwaysOpen ) { options.active.parent().andSelf().toggleClass(options.selectedClass); var toHide = options.active.next(), data = { - instance: this, options: options, newHeader: jQuery([]), oldHeader: options.active, newContent: jQuery([]), oldContent: toHide }, - toShow = options.active = $([]); + toShow = (options.active = $([])); toggle.call(this, toShow, toHide, data ); return false; } @@ -200,34 +179,33 @@ function clickHandler(event) { // due to the event delegation model, we have to check if one // of the parent elements is our actual header, and find that - if ( clicked.parents(options.header).length ) - while ( !clicked.is(options.header) ) - clicked = clicked.parent(); + // otherwise stick with the initial target + clicked = $( clicked.parents(options.header)[0] || clicked ); var clickedActive = clicked[0] == options.active[0]; // if animations are still active, or the active header is the target, ignore click - if (options.running || (options.alwaysOpen && clickedActive)) + if (options.running || (options.alwaysOpen && clickedActive)) { return false; - if (!clicked.is(options.header)) + } + if (!clicked.is(options.header)) { return; - + } + // switch classes options.active.parent().andSelf().toggleClass(options.selectedClass); if ( !clickedActive ) { clicked.parent().andSelf().addClass(options.selectedClass); } - + // find elements to show and hide var toShow = clicked.next(), toHide = options.active.next(), - //data = [clicked, options.active, toShow, toHide], data = { - instance: this, options: options, - newHeader: clicked, + newHeader: clickedActive && !options.alwaysOpen ? $([]) : clicked, oldHeader: options.active, - newContent: toShow, + newContent: clickedActive && !options.alwaysOpen ? $([]) : toShow, oldContent: toHide }, down = options.headers.index( options.active[0] ) > options.headers.index( clicked[0] ); @@ -239,7 +217,7 @@ function clickHandler(event) { }; function findActive(headers, selector) { - return selector != undefined + return selector ? typeof selector == "number" ? headers.filter(":eq(" + selector + ")") : headers.not(headers.not(selector)) @@ -255,7 +233,7 @@ $.extend($.ui.accordion, { animated: 'slide', event: "click", header: "a", - autoheight: true, + autoHeight: true, running: 0, navigationFilter: function() { return this.href.toLowerCase() == location.href.toLowerCase(); @@ -286,7 +264,7 @@ $.extend($.ui.accordion, { duration: options.duration, easing: options.easing, complete: function() { - if ( !options.autoheight ) { + if ( !options.autoHeight ) { options.toShow.css("height", "auto"); } options.complete(); @@ -303,9 +281,14 @@ $.extend($.ui.accordion, { this.slide(options, { easing: "easeinout", duration: 700 - }) + }); } } }); +// deprecated, use accordion("activate", index) instead +$.fn.activate = function(index) { + return this.accordion("activate", index); +}; + })(jQuery); |