/**
* An adapter for the Shadowbox media viewer and the Yahoo! User Interface (YUI)
* JavaScript library.
*
* This file is part of Shadowbox.
*
* Shadowbox is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* Shadowbox is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
* more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Shadowbox. If not, see .
*
* @author Michael J. I. Jackson
* @copyright 2007 Michael J. I. Jackson
* @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU LGPL 3.0
* @version SVN: $Id: shadowbox-yui.js 48 2008-01-26 09:58:25Z mjijackson $
*/
if(typeof YAHOO == 'undefined'){
throw 'Unable to load Shadowbox, core YUI utilities (yahoo, dom, event, anim) not found.';
}
// create the Shadowbox object first
var Shadowbox = {};
Shadowbox.lib = function(){
var E = YAHOO.util.Event;
var D = YAHOO.util.Dom;
return {
/**
* Gets the value of the style on the given element.
*
* @param {HTMLElement} el The DOM element
* @param {String} style The name of the style (e.g. margin-top)
* @return {mixed} The value of the given style
* @public
*/
getStyle: function(el, style){
return D.getStyle(el, style);
},
/**
* Sets the style on the given element to the given value. May be an
* object to specify multiple values.
*
* @param {HTMLElement} el The DOM element
* @param {String/Object} style The name of the style to set if a
* string, or an object of name =>
* value pairs
* @param {String} value The value to set the given style to
* @return void
* @public
*/
setStyle: function(el, style, value){
if(typeof style != 'object'){
var temp = {};
temp[style] = value;
style = temp;
}
for(var s in style){
D.setStyle(el, s, style[s]);
}
},
/**
* Gets a reference to the given element.
*
* @param {String/HTMLElement} el The element to fetch
* @return {HTMLElement} A reference to the element
* @public
*/
get: function(el){
return D.get(el);
},
/**
* Removes an element from the DOM.
*
* @param {HTMLElement} el The element to remove
* @return void
* @public
*/
remove: function(el){
el.parentNode.removeChild(el);
},
/**
* Gets the target of the given event. The event object passed will be
* the same object that is passed to listeners registered with
* addEvent().
*
* @param {mixed} e The event object
* @return {HTMLElement} The event's target element
* @public
*/
getTarget: function(e){
return E.getTarget(e.browserEvent || e);
},
/**
* Prevents the event's default behavior. The event object passed will
* be the same object that is passed to listeners registered with
* addEvent().
*
* @param {mixed} e The event object
* @return void
* @public
*/
preventDefault: function(e){
E.preventDefault(e.browserEvent || e);
},
/**
* Adds an event listener to the given element. It is expected that this
* function will be passed the event as its first argument.
*
* @param {HTMLElement} el The DOM element to listen to
* @param {String} name The name of the event to register
* (i.e. 'click', 'scroll', etc.)
* @param {Function} handler The event handler function
* @return void
* @public
*/
addEvent: function(el, name, handler){
E.addListener(el, name, handler);
},
/**
* Removes an event listener from the given element.
*
* @param {HTMLElement} el The DOM element to stop listening to
* @param {String} name The name of the event to stop
* listening for (i.e. 'click')
* @param {Function} handler The event handler function
* @return void
* @public
*/
removeEvent: function(el, name, handler){
E.removeListener(el, name, handler);
},
/**
* Animates numerous styles of the given element. The second parameter
* of this function will be an object of the type that is expected by
* YAHOO.util.Anim. See http://developer.yahoo.com/yui/docs/YAHOO.util.Anim.html
* for more information.
*
* @param {HTMLElement} el The DOM element to animate
* @param {Object} obj The animation attributes/parameters
* @param {Number} duration The duration of the animation
* (in seconds)
* @param {Function} callback A callback function to call when
* the animation completes
* @return void
* @public
*/
animate: function(el, obj, duration, callback){
var anim = new YAHOO.util.Anim(el, obj, duration, YAHOO.util.Easing.easeOut);
if(typeof callback == 'function'){
var f = function(){
anim.onComplete.unsubscribe(f);
callback.call(anim, anim);
};
anim.onComplete.subscribe(f, anim, true);
}
anim.animate();
}
};
}();