Team:SYSU-China/temp/SpryPanelSet.js
From 2011.igem.org
// SpryPanelSet.js - version 0.4 - Spry Pre-Release 1.7 // // Copyright (c) 2010. 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.
(function() { // BeginSpryComponent
if (typeof Spry == "undefined" || !Spry.Widget || !Spry.Widget.Base) { alert("SpryPanelSet.js requires SpryWidget.js!"); return; }
Spry.Widget.PanelSet = function(elements, opts) { Spry.Widget.Base.call(this);
this.elements = elements ? Spry.$$(elements) : []; this.currentPanel = null;
// Slide Show Mode properties.
this.displayTimerID = 0;
// Initialize the panel set object with the global defaults.
this.setOptions(this, Spry.Widget.PanelSet.config);
// Override the defaults with any options passed into the constructor.
this.setOptions(this, opts);
if (typeof (this.defaultPanel) == "number") { if (this.defaultPanel < 0) this.defaultPanel = 0; else { var count = this.getPanelCount(); if (this.defaultPanel >= count) this.defaultPanel = (count > 1) ? (count - 1) : 0; }
}
this.initialize(); };
Spry.Widget.PanelSet.prototype = new Spry.Widget.Base(); Spry.Widget.PanelSet.prototype.constructor = Spry.Widget.PanelSet;
Spry.Widget.PanelSet.config = { defaultPanel: 0, autoPlay: false, displayInterval: 4000, // msecs
visibleClass: "PanelVisible", hiddenClass: "PanelHidden" }
Spry.Widget.PanelSet.prototype.initialize = function() { var evt = new Spry.Widget.Event(this); this.notifyObservers("onPreInitialize", evt); if (!evt.performDefaultAction) return;
this.defaultPanel = this.indexToElement(this.defaultPanel); var panels = this.getPanels();
for (var i = 0; i < panels.length; i++) { var ele = panels[i]; var addClass = this.hiddenClass; var removeClass = this.visibleClass;
if (ele == this.defaultPanel) { addClass = this.visibleClass; removeClass = this.hiddenClass; this.currentPanel = this.defaultPanel; }
Spry.Utils.addClassName(ele, addClass); Spry.Utils.removeClassName(ele, removeClass); }
if (this.autoPlay) this.play();
this.notifyObservers("onPostInitialize", evt); };
Spry.Widget.PanelSet.prototype.getPanels = function() { return this.elements.slice(0); };
Spry.Widget.PanelSet.prototype.getPanelCount = function() { return this.getPanels().length; };
Spry.Widget.PanelSet.prototype.getCurrentPanel = function() { return this.currentPanel; };
Spry.Widget.PanelSet.prototype.getCurrentPanelIndex = function() { return this.getPanelIndex(this.getCurrentPanel()); };
Spry.Widget.PanelSet.prototype.getPanelIndex = function(panel) { var panels = this.getPanels(); for (var i = 0; i < panels.length; i++) { if (panel == panels[i]) return i; } return -1; };
Spry.Widget.PanelSet.prototype.getPanel = function(panelIndex) { return this.getPanels()[panelIndex]; };
Spry.Widget.PanelSet.prototype.indexToElement = function(eleOrIndex) { if (typeof eleOrIndex == "number") return this.getPanels()[eleOrIndex]; return eleOrIndex ? Spry.$$(eleOrIndex)[0] : eleOrIndex; };
Spry.Widget.PanelSet.prototype.elementToIndex = function(eleOrIndex) { var panels = this.getPanels();
if (typeof eleOrIndex == "number") return panels[eleOrIndex];
if (typeof eleOrIndex == "string") eleOrIndex = Spry.$$(eleOrIndex)[0];
return !eleOrIndex ? -1 : panels.indexOf(eleOrIndex); };
Spry.Widget.PanelSet.prototype.createEvent = function(target, opts) { var eopts = { target: target, targetIndex: this.getPanelIndex(target) }; return new Spry.Widget.Event(this, this.setOptions(eopts, opts)); };
Spry.Widget.PanelSet.prototype.showPanel = function(eleOrIndex) { var ele = this.indexToElement(eleOrIndex); if (ele && ele != this.currentPanel) { var evt = this.createEvent(ele, { currentPanel: this.currentPanel }); this.notifyObservers("onPreShowPanel", evt);
if (evt.performDefaultAction) { if (this.currentPanel) this.hidePanel(this.currentPanel);
this.currentPanel = ele;
Spry.Utils.addClassName(ele, this.visibleClass); Spry.Utils.removeClassName(ele, this.hiddenClass);
this.notifyObservers("onPostShowPanel", evt); } } };
Spry.Widget.PanelSet.prototype.hidePanel = function(eleOrIndex) { var evt = this.createEvent(this.currentPanel); this.notifyObservers("onPreHidePanel", evt);
if (evt.performDefaultAction) { var ele = this.currentPanel;
Spry.Utils.addClassName(ele, this.hiddenClass); Spry.Utils.removeClassName(ele, this.visibleClass);
this.currentPanel = null;
this.notifyObservers("onPostHidePanel", evt); } };
Spry.Widget.PanelSet.prototype.showPreviousPanel = function() { var evt = new Spry.Widget.Event(this); this.notifyObservers("onPreShowPreviousPanel", evt); if (!evt.performDefaultAction) return;
var curIndex = this.getCurrentPanelIndex(); this.showPanel(((curIndex < 1) ? this.getPanelCount() : curIndex) - 1);
this.notifyObservers("onPostShowPreviousPanel", evt); };
Spry.Widget.PanelSet.prototype.showNextPanel = function() { var evt = new Spry.Widget.Event(this); this.notifyObservers("onPreShowNextPanel", evt); if (!evt.performDefaultAction) return;
this.showPanel((this.getCurrentPanelIndex()+1) % this.getPanelCount());
this.notifyObservers("onPostShowNextPanel", evt); };
Spry.Widget.PanelSet.prototype.showFirstPanel = function() { var evt = new Spry.Widget.Event(this); this.notifyObservers("onPreShowFirstPanel", evt); if (!evt.performDefaultAction) return;
this.showPanel(0);
this.notifyObservers("onPostShowFirstPanel", evt); };
Spry.Widget.PanelSet.prototype.showLastPanel = function() { var evt = new Spry.Widget.Event(this); this.notifyObservers("onPreShowLastPanel", evt); if (!evt.performDefaultAction) return;
var count = this.getPanelCount(); this.showPanel(count > 0 ? count - 1 : 0);
this.notifyObservers("onPostShowLastPanel", evt); };
Spry.Widget.PanelSet.prototype.startTimer = function()
{
this.stopTimer();
var self = this;
this.displayTimerID = setTimeout(function() { self.showNextPanel(); self.startTimer(); }, this.displayInterval);
};
Spry.Widget.PanelSet.prototype.stopTimer = function() { if (this.displayTimerID) clearTimeout(this.displayTimerID); this.displayTimerID = 0; };
Spry.Widget.PanelSet.prototype.isPlaying = function() { return this.displayTimerID != 0; };
Spry.Widget.PanelSet.prototype.play = function() { var evt = new Spry.Widget.Event(this); this.notifyObservers("onPreStartSlideShowMode", evt); if (!evt.performDefaultAction) return;
this.startTimer();
this.notifyObservers("onPostStartSlideShowMode", evt); };
Spry.Widget.PanelSet.prototype.stop = function() { var evt = new Spry.Widget.Event(this); this.notifyObservers("onPreStopSlideShowMode", evt); if (!evt.performDefaultAction) return;
this.stopTimer();
this.notifyObservers("onPostStopSlideShowMode", evt); };
})(); // EndSpryComponent