/* Spry.Effect.js - Revision: Spry Preview Release 1.4 */ // (version 0.23) // // Copyright (c) 2006. Adobe Systems Incorporated. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of Adobe Systems Incorporated nor the names of its // contributors may be used to endorse or promote products derived from this // software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. var Spry; if (!Spry) Spry = {}; Spry.forwards = 1; // const Spry.backwards = 2; // const Spry.linearTransition = 1; // const Spry.sinusoidalTransition = 2; // const if (!Spry.Effect) Spry.Effect = {}; ////////////////////////////////////////////////////////////////////// // // Spry.Effect.Registry // ////////////////////////////////////////////////////////////////////// Spry.Effect.Registry = function() { this.elements = new Array(); _AnimatedElement = function (element) { this.element = element; this.currentEffect = -1; this.effectArray = new Array(); }; this.AnimatedElement = _AnimatedElement; }; Spry.Effect.Registry.prototype.getRegisteredEffect = function(element, effect) { var eleIdx = this.getIndexOfElement(element); if (eleIdx == -1) { this.elements[this.elements.length] = new this.AnimatedElement(element); eleIdx = this.elements.length - 1; } var foundEffectArrayIdx = -1; for (var i = 0; i < this.elements[eleIdx].effectArray.length; i++) { if (this.elements[eleIdx].effectArray[i]) { if (this.effectsAreTheSame(this.elements[eleIdx].effectArray[i], effect)) { foundEffectArrayIdx = i; //this.elements[eleIdx].effectArray[i].reset(); if (this.elements[eleIdx].effectArray[i].isRunning == true) { //Spry.Debug.trace('isRunning == true'); this.elements[eleIdx].effectArray[i].cancel(); } this.elements[eleIdx].currentEffect = i; if (this.elements[eleIdx].effectArray[i].options && (this.elements[eleIdx].effectArray[i].options.toggle != null)) { if (this.elements[eleIdx].effectArray[i].options.toggle == true) this.elements[eleIdx].effectArray[i].doToggle(); } else { // same effect name (but no options or options.toggle field) this.elements[eleIdx].effectArray[i] = effect; } break; } } } if (foundEffectArrayIdx == -1) { var currEffectIdx = this.elements[eleIdx].effectArray.length; this.elements[eleIdx].effectArray[currEffectIdx] = effect; this.elements[eleIdx].currentEffect = currEffectIdx; } var idx = this.elements[eleIdx].currentEffect; return this.elements[eleIdx].effectArray[idx]; } Spry.Effect.Registry.prototype.getIndexOfElement = function(element) { var registryIndex = -1; for (var i = 0; i < this.elements.length; i++) { if (this.elements[i]) { if (this.elements[i].element == element) registryIndex = i; } } return registryIndex; } Spry.Effect.Registry.prototype.effectsAreTheSame = function(effectA, effectB) { if (effectA.name != effectB.name) return false; if(effectA.effectsArray) // cluster effect { if (!effectB.effectsArray || effectA.effectsArray.length != effectB.effectsArray.length) return false; for (var i = 0; i < effectA.effectsArray.length; i++) { if(!Spry.Effect.Utils.optionsAreIdentical(effectA.effectsArray[i].effect.options, effectB.effectsArray[i].effect.options)) return false; } } else // single effect { if(effectB.effectsArray || !Spry.Effect.Utils.optionsAreIdentical(effectA.options, effectB.options)) return false; } return true; } var SpryRegistry = new Spry.Effect.Registry; ////////////////////////////////////////////////////////////////////// // // Spry.Effect.Utils // ////////////////////////////////////////////////////////////////////// if (!Spry.Effect.Utils) Spry.Effect.Utils = {}; Spry.Effect.Utils.showError = function(msg) { alert('Spry.Effect ERR: ' + msg); } Spry.Effect.Utils.Position = function() { this.x = 0; // left this.y = 0; // top this.units = "px"; } Spry.Effect.Utils.Rectangle = function() { this.width = 0; this.height = 0; this.units = "px"; } Spry.Effect.Utils.PositionedRectangle = function() { this.position = new Spry.Effect.Utils.Position; this.rectangle = new Spry.Effect.Utils.Rectangle; } Spry.Effect.Utils.intToHex = function(integerNum) { var result = integerNum.toString(16); if (result.length == 1) result = "0" + result; return result; } Spry.Effect.Utils.hexToInt = function(hexStr) { return parseInt(hexStr, 16); } Spry.Effect.Utils.rgb = function(redInt, greenInt, blueInt) { var redHex = Spry.Effect.Utils.intToHex(redInt); var greenHex = Spry.Effect.Utils.intToHex(greenInt); var blueHex = Spry.Effect.Utils.intToHex(blueInt); compositeColorHex = redHex.concat(greenHex, blueHex); compositeColorHex = '#' + compositeColorHex; return compositeColorHex; } Spry.Effect.Utils.camelize = function(stringToCamelize) { var oStringList = stringToCamelize.split('-'); var isFirstEntry = true; var camelizedString = ''; for(var i=0; i < oStringList.length; i++) { if(oStringList[i].length>0) { if(isFirstEntry) { camelizedString = oStringList[i]; isFirstEntry = false; } else { var s = oStringList[i]; camelizedString += s.charAt(0).toUpperCase() + s.substring(1); } } } return camelizedString; } Spry.Effect.Utils.isPercentValue = function(value) { var result = false; try { if (value.lastIndexOf("%") > 0) result = true; } catch (e) {} return result; } Spry.Effect.Utils.getPercentValue = function(value) { var result = 0; try { result = Number(value.substring(0, value.lastIndexOf("%"))); } catch (e) {Spry.Effect.Utils.showError('Spry.Effect.Utils.getPercentValue: ' + e);} return result; } Spry.Effect.Utils.getPixelValue = function(value) { var result = 0; try { result = Number(value.substring(0, value.lastIndexOf("px"))); } catch (e) {} return result; } Spry.Effect.Utils.getFirstChildElement = function(node) { if (node) { var childCurr = node.firstChild; while (childCurr) { if (childCurr.nodeType == 1) // Node.ELEMENT_NODE return childCurr; childCurr = childCurr.nextSibling; } } return null; }; Spry.Effect.Utils.fetchChildImages = function(startEltIn, targetImagesOut) { if(!startEltIn || startEltIn.nodeType != 1 || !targetImagesOut) return; if(startEltIn.hasChildNodes()) { var childImages = startEltIn.getElementsByTagName('img') var imageCnt = childImages.length; for(var i=0; i