Rev 1987 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/** $Id: alphaAPI.js,v 1.1 2007-03-16 12:39:35 jp_milcent Exp $ */
// {{{ license
/*
* Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// }}}
// {{{ intro
/**
* Title: alphaAPI
* Original Author: chrisken
* Original Url: http://www.cs.utexas.edu/users/chrisken/alphaapi.html
*
* Modified by Dan Allen <dan.allen@mojavelinux.com>
* Note: When the stopAlpha is reached and it is equal to 0, the element's
* style is set to display: none to fix a bug in domTT
*/
// }}}
function alphaAPI(element, fadeInDelay, fadeOutDelay, startAlpha, stopAlpha, offsetTime, deltaAlpha)
{
// {{{ properties
this.element = typeof(element) == 'object' ? element : document.getElementById(element);
this.fadeInDelay = fadeInDelay || 40;
this.fadeOutDelay = fadeOutDelay || this.fadeInDelay;
this.startAlpha = startAlpha;
this.stopAlpha = stopAlpha;
// make sure a filter exists so an error is not thrown
if (typeof(this.element.filters) == 'object')
{
if (typeof(this.element.filters.alpha) == 'undefined')
{
this.element.style.filter += 'alpha(opacity=100)';
}
}
this.offsetTime = (offsetTime || 0) * 1000;
this.deltaAlpha = deltaAlpha || 10;
this.timer = null;
this.paused = false;
this.started = false;
this.cycle = false;
this.command = function() {};
return this;
// }}}
}
// use prototype methods to save memory
// {{{ repeat()
alphaAPI.prototype.repeat = function(repeat)
{
this.cycle = repeat ? true : false;
}
// }}}
// {{{ setAlphaBy()
alphaAPI.prototype.setAlphaBy = function(deltaAlpha)
{
this.setAlpha(this.getAlpha() + deltaAlpha);
}
// }}}
// {{{ toggle()
alphaAPI.prototype.toggle = function()
{
if (!this.started)
{
this.start();
}
else if (this.paused)
{
this.unpause();
}
else
{
this.pause();
}
}
// }}}
// {{{ timeout()
alphaAPI.prototype.timeout = function(command, delay)
{
this.command = command;
this.timer = setTimeout(command, delay);
}
// }}}
// {{{ setAlpha()
alphaAPI.prototype.setAlpha = function(opacity)
{
if (typeof(this.element.filters) == 'object')
{
this.element.filters.alpha.opacity = opacity;
}
else if (this.element.style.setProperty)
{
this.element.style.setProperty('opacity', opacity / 100, '');
// handle the case of mozilla < 1.7
this.element.style.setProperty('-moz-opacity', opacity / 100, '');
// handle the case of old kthml
this.element.style.setProperty('-khtml-opacity', opacity / 100, '');
}
}
// }}}
// {{{ getAlpha()
alphaAPI.prototype.getAlpha = function()
{
if (typeof(this.element.filters) == 'object')
{
return this.element.filters.alpha.opacity;
}
else if (this.element.style.getPropertyValue)
{
var opacityValue = this.element.style.getPropertyValue('opacity');
// handle the case of mozilla < 1.7
if (opacityValue == '')
{
opacityValue = this.element.style.getPropertyValue('-moz-opacity');
}
// handle the case of old khtml
if (opacityValue == '')
{
opacityValue = this.element.style.getPropertyValue('-khtml-opacity');
}
return opacityValue * 100;
}
return 100;
}
// }}}
// {{{ start()
alphaAPI.prototype.start = function()
{
this.started = true;
this.setAlpha(this.startAlpha);
// determine direction
if (this.startAlpha > this.stopAlpha)
{
var instance = this;
this.timeout(function() { instance.fadeOut(); }, this.offsetTime);
}
else
{
var instance = this;
this.timeout(function() { instance.fadeIn(); }, this.offsetTime);
}
}
// }}}
// {{{ stop()
alphaAPI.prototype.stop = function()
{
this.started = false;
this.setAlpha(this.stopAlpha);
if (this.stopAlpha == 0)
{
this.element.style.display = 'none';
}
this.stopTimer();
this.command = function() {};
}
// }}}
// {{{ reset()
alphaAPI.prototype.reset = function()
{
this.started = false;
this.setAlpha(this.startAlpha);
this.stopTimer();
this.command = function() {};
}
// }}}
// {{{ pause()
alphaAPI.prototype.pause = function()
{
this.paused = true;
this.stopTimer();
}
// }}}
// {{{ unpause()
alphaAPI.prototype.unpause = function()
{
this.paused = false;
if (!this.started)
{
this.start();
}
else
{
this.command();
}
}
// }}}
// {{{ stopTimer()
alphaAPI.prototype.stopTimer = function()
{
clearTimeout(this.timer);
this.timer = null;
}
// }}}
// {{{ fadeOut()
alphaAPI.prototype.fadeOut = function()
{
this.stopTimer();
if (this.getAlpha() > this.stopAlpha)
{
this.setAlphaBy(-1 * this.deltaAlpha);
var instance = this;
this.timeout(function() { instance.fadeOut(); }, this.fadeOutDelay);
}
else
{
if (this.cycle)
{
var instance = this;
this.timeout(function() { instance.fadeIn(); }, this.fadeInDelay);
}
else
{
if (this.stopAlpha == 0)
{
this.element.style.display = 'none';
}
this.started = false;
}
}
}
// }}}
// {{{ fadeIn()
alphaAPI.prototype.fadeIn = function()
{
this.stopTimer();
if (this.getAlpha() < this.startAlpha)
{
this.setAlphaBy(this.deltaAlpha);
var instance = this;
this.timeout(function() { instance.fadeIn(); }, this.fadeInDelay);
}
else
{
if (this.cycle)
{
var instance = this;
this.timeout(function() { instance.fadeOut(); }, this.fadeOutDelay);
}
else
{
this.started = false;
}
}
}
// }}}