From 710c48f908290c52b93e57e29741fcd0696b2d22 Mon Sep 17 00:00:00 2001 From: Thomas Keil Date: Thu, 4 Jan 2007 22:29:18 +0000 Subject: *** empty log message *** --- javascript/alphaAPI.js | 294 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 javascript/alphaAPI.js (limited to 'javascript/alphaAPI.js') diff --git a/javascript/alphaAPI.js b/javascript/alphaAPI.js new file mode 100644 index 0000000..735a23f --- /dev/null +++ b/javascript/alphaAPI.js @@ -0,0 +1,294 @@ +/** $Id: alphaAPI.js,v 1.1 2007/01/04 22:29:18 thomas 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 + * 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; + } + } +} + +// }}} -- cgit v1.2.3