home *** CD-ROM | disk | FTP | other *** search
/ PC Advisor 2005 August / PCADVD_121.iso / internet / nsb-setup.exe / chrome / inspector.jar / content / inspector / Flasher.js < prev    next >
Encoding:
JavaScript  |  2004-11-25  |  5.2 KB  |  169 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Netscape Public License
  5.  * Version 1.1 (the "License"); you may not use this file except in
  6.  * compliance with the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/NPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is mozilla.org code.
  15.  *
  16.  * The Initial Developer of the Original Code is 
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 2001
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *   Joe Hewitt <hewitt@netscape.com> (original author)
  23.  *
  24.  *
  25.  * Alternatively, the contents of this file may be used under the terms of
  26.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  27.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  28.  * in which case the provisions of the GPL or the LGPL are applicable instead
  29.  * of those above. If you wish to allow use of your version of this file only
  30.  * under the terms of either the GPL or the LGPL, and not to allow others to
  31.  * use your version of this file under the terms of the NPL, indicate your
  32.  * decision by deleting the provisions above and replace them with the notice
  33.  * and other provisions required by the GPL or the LGPL. If you do not delete
  34.  * the provisions above, a recipient may use your version of this file under
  35.  * the terms of any one of the NPL, the GPL or the LGPL.
  36.  *
  37.  * ***** END LICENSE BLOCK ***** */
  38.  
  39. /***************************************************************
  40. * Flasher ---------------------------------------------------
  41. *   Object for controlling a timed flashing animation which 
  42. *   paints a border around an element.
  43. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  44. * REQUIRED IMPORTS:
  45. ****************************************************************/
  46.  
  47. //////////// global variables /////////////////////
  48.  
  49. var gFlasherRegistry = [];
  50.  
  51. //////////// global constants ////////////////////
  52.  
  53. ////////////////////////////////////////////////////////////////////////////
  54. //// class Flasher
  55.  
  56. function Flasher(aColor, aThickness, aDuration, aSpeed, aInvert)
  57. {
  58.   this.mShell = XPCU.getService("@mozilla.org/inspector/flasher;1", "inIFlasher");
  59.   this.mShell.color = aColor;
  60.   this.mShell.thickness = aThickness;
  61.   this.mShell.invert = aInvert;
  62.   this.duration = aDuration;
  63.   this.mSpeed = aSpeed;
  64.   
  65.   this.register();
  66. }
  67.  
  68. Flasher.prototype = 
  69. {
  70.   ////////////////////////////////////////////////////////////////////////////
  71.   //// Initialization
  72.  
  73.   mFlashTimeout: null,
  74.   mElement:null,
  75.   mRegistryId: null,
  76.   mFlashes: 0,
  77.   mStartTime: 0,
  78.   mDuration: 0,
  79.   mSpeed: 0,
  80.  
  81.   ////////////////////////////////////////////////////////////////////////////
  82.   //// Properties
  83.  
  84.   get flashing() { return this.mFlashTimeout != null; },
  85.   
  86.   get element() { return this.mElement; },
  87.   set element(val) 
  88.   { 
  89.     if (val && val.nodeType == Node.ELEMENT_NODE) {
  90.       this.mElement = val; 
  91.       this.mShell.scrollElementIntoView(val);
  92.     } else 
  93.       throw "Invalid node type.";
  94.   },
  95.  
  96.   get color() { return this.mShell.color; },
  97.   set color(aVal) { return this.mShell.color = aVal; },
  98.  
  99.   get thickness() { return this.mShell.thickness; },
  100.   set thickness(aVal) { this.mShell.thickness = aVal; },
  101.  
  102.   get duration() { return this.mDuration; },
  103.   set duration(aVal) { this.mDuration = aVal; },
  104.  
  105.   get speed() { return this.mSpeed; },
  106.   set speed(aVal) { this.mSpeed = aVal; },
  107.  
  108.   get invert() { return this.mShell.invert; },
  109.   set invert(aVal) { this.mShell.invert = aVal; },
  110.  
  111.   // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  112.   // :::::::::::::::::::: Methods ::::::::::::::::::::::::::::
  113.   // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  114.  
  115.   register: function()
  116.   {
  117.     var length = gFlasherRegistry.length;
  118.     gFlasherRegistry[length] = this;
  119.     this.mRegistryId = length;
  120.   },
  121.  
  122.   start: function(aDuration, aSpeed, aHold)
  123.   {
  124.     this.mUDuration = aDuration ? aDuration*1000 : this.mDuration;
  125.     this.mUSpeed = aSpeed ? aSpeed : this.mSpeed
  126.     this.mHold = aHold;
  127.     this.mFlashes = 0;
  128.     this.mStartTime = new Date();
  129.     this.doFlash();
  130.   },
  131.  
  132.   doFlash: function()
  133.   {
  134.     if (this.mHold || this.mFlashes%2) {
  135.       this.paintOn();
  136.     } else {
  137.       this.paintOff();
  138.     }
  139.     this.mFlashes++;
  140.  
  141.     if (this.mUDuration < 0 || new Date() - this.mStartTime < this.mUDuration) {
  142.       this.mFlashTimeout = window.setTimeout("gFlasherRegistry["+this.mRegistryId+"].doFlash()", this.mUSpeed);
  143.     } else {
  144.       this.stop();
  145.     }
  146. },
  147.  
  148.   stop: function()
  149.   {
  150.     if (this.flashing) {
  151.       window.clearTimeout(this.mFlashTimeout);
  152.       this.mFlashTimeout = null;
  153.       this.paintOff();
  154.     }
  155.   },
  156.  
  157.   paintOn: function()
  158.   {
  159.     this.mShell.drawElementOutline(this.mElement);
  160.   },
  161.  
  162.   paintOff: function()
  163.   {
  164.     this.mShell.repaintElement(this.mElement);
  165.   }
  166.  
  167. };
  168.  
  169.