home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Gamer 4.5
/
1998-11_Disc_4.5.bin
/
ELINK
/
NSCOMM
/
BUTTON.JS
< prev
next >
Wrap
Text File
|
1997-10-22
|
8KB
|
299 lines
/* ==================================================================
FILE: Button.js
DESCR: Button control for Netscape Help implementation.
NOTES: May require routine(s) from Utility.js.
================================================================== */
var UP = 0
var DOWN = 1
var SELECTED = 2
var DISABLED = 3
// Disables the button bar without visibly disabling the buttons.
var bDisableBtnBar = false
// Bind events to event handler.
document.captureEvents( Event.MOUSEDOWN )
document.onmousedown = mouseDownEvt
function mouseDownEvt( evt )
{
//alert( "mouseDownEvt()" )
// Block right click events to block potentially destabilizing local menus.
if ( evt.which == 3 ) {
return false
}
// Block left mouse down when bar is disabled.
else if ( bDisableBtnBar ) {
return false
}
return true
}
/*
DESCR: Button class.
PARAMS: upImage Image file for up state.
downImage Image file for down state.
selectedImage Image file for selected state.
disabledImage Image file for disabled state.
command Command to execute.
bBlender Specifies that the button should behave as a
blender-type button.
label Text to go next to button. Use "" for no label.
toolTip Mouse tip text. Use "" for no tool tip.
bar The buttonBar object.
RETURNS:
NOTES:
*/
function button( upImage, downImage, selectedImage, disabledImage, command,
bBlender, label, toolTip, bar )
{
this.state = UP // Default state.
this.buttonNumber = bar.aButtons.length
this.aImages = new Array( upImage, downImage, selectedImage, disabledImage )
this.command = command
this.bBlender = bBlender
this.bOn = false
this.label = label
this.toolTip = toolTip
this.bar = bar
this.mouseOverEvt = mouseOverEvt
this.mouseOutEvt = mouseOutEvt
this.clickEvt = clickEvt
this.enable = enable
this.turnOff = turnOff
this.setState = setState
}
/*
DESCR: Enables and disables a button.
PARAMS: bEnable Pass true for enable; false for disable.
RETURNS:
NOTES:
*/
function enable( bEnable )
{
this.setState( bEnable ? UP : DISABLED )
}
/*
DESCR: Turns the button off if it is a blender button that is on.
PARAMS:
RETURNS:
NOTES:
*/
function turnOff()
{
if ( this.bBlender && this.bOn ) {
this.setState( UP )
}
}
/*
DESCR: Assigns state and sets button image.
PARAMS: newState State value for the button.
RETURNS:
NOTES:
*/
function setState( newState )
{
this.state = newState
if ( this.bBlender && this.state == UP ) this.bOn = false
document.images[ this.buttonNumber ].src = this.aImages[ this.state ]
}
/*
DESCR: Mouse over event handler.
PARAMS:
RETURNS:
NOTES:
*/
function mouseOverEvt()
{
if ( this.state == DISABLED ) return
if ( this.bBlender && this.bOn ) return
if ( this.state == UP ) {
this.setState( SELECTED )
}
}
/*
DESCR: Mouse out event handler.
PARAMS:
RETURNS:
NOTES:
*/
function mouseOutEvt()
{
if ( this.state == DISABLED ) return
if ( this.bBlender && this.bOn ) return
this.setState( UP )
}
/*
DESCR: Mouse click event handler.
PARAMS:
RETURNS:
NOTES:
*/
function clickEvt()
{
if ( this.state == DISABLED ) return
if ( this.bBlender && this.bOn ) return
this.setState( DOWN )
// If this is a blender button, turn off the other blenders.
if ( this.bBlender ) {
for ( var i = 0; i < this.bar.aButtons.length; i++ ) {
this.bar.aButtons[ i ].turnOff()
}
this.bOn = true
}
// Execute command.
eval( this.command )
}
// End class definition: button.
/*
DESCR: Button bar class.
PARAMS: bgColor Background color for the bar.
bLandscape Pass true for landscape orientation, false for portrait.
align Button alignment. Pass "LEFT" or "RIGHT".
width Bar width in pixels or percentage.
spacing For landscape, this refers to additional pixels to right
of button image. Use "" for no extra space. For portrait,
this refers to the height of an additional row between
buttons. Use "" for no extra space.
barName Identifier representing the bar.
RETURNS:
NOTES:
*/
function buttonBar( bgColor, bLandscape, align, width, spacing, barName )
{
//top.trace( "buttonBar constructor()" )
this.aButtons = new Array()
this.bgColor = bgColor
this.bLandscape = bLandscape
this.align = align
this.width = width
this.spacing = spacing
this.barName = barName
this.addButton = addButton
this.create = create
}
/*
DESCR: Adds a button to a bar.
PARAMS: button The button object.
RETURNS:
NOTES:
*/
function addButton( button )
{
this.aButtons[ this.aButtons.length ] = button
}
/*
DESCR: Writes the document.
PARAMS:
RETURNS:
NOTES:
*/
function create()
{
if ( this.aButtons.length == 0 ) return false
var html
html = "<HTML>"
html += "<HEAD>"
// html += "<STYLE TYPE = 'text/javascript'>"
// html += "classes.label.all.fontFamily = 'arial';"
// html += "classes.label.all.fontSize = '12px';"
// html += "classes.label.all.color = '#000066';"
// html += "</STYLE>"
html += "</HEAD>"
html += "<BODY BGCOLOR = " + this.bgColor + ">"
html += "<TABLE BORDER = 0 ALIGN = " + this.align + " WIDTH = " + this.width + ">"
// For each button.
html += "<TR>"
for ( var i = 0; i < this.aButtons.length; i++ ) {
html += "<TD ALIGN = 'center'>"
html += "<A HREF = 'javascript:" + this.barName + ".aButtons[" + i + "].clickEvt()' "
html += "ONMOUSEOVER = '" + this.barName + ".aButtons[" + i + "].mouseOverEvt()' "
html += "ONMOUSEOUT = '" + this.barName + ".aButtons[" + i + "].mouseOutEvt()'>"
html += "<IMG SRC = '" + this.aButtons[ i ].aImages[ this.aButtons[ i ].state ] + "' BORDER = 0 ALT = '" + this.aButtons[ i ].toolTip + "'>"
html += "</A>"
if ( this.spacing != "" ) {
html += "<SPACER TYPE = 'block' WIDTH = " + this.spacing + ">"
}
html += "</TD>"
if ( !this.bLandscape ) {
// Add label cell and terminate row. Add spacer row.
html += "<TD ALIGN = 'left'>"
html += "<DIV CLASS = label>"
html += this.aButtons[ i ].label
html += "</DIV>"
html += "</TD>"
html += "</TR>"
if ( this.spacing != "" ) {
html += "<TR><TD><SPACER TYPE = 'block' HEIGHT = " +
this.spacing + "></TD></TR>"
}
}
}
if ( this.bLandscape ) {
// End row and fill next with labels.
html += "</TR>"
html += "<TR>"
for ( var i = 0; i < this.aButtons.length; i++ ) {
html += "<TD ALIGN = 'center'>"
html += "<DIV CLASS = label>"
html += this.aButtons[ i ].label
html += "</DIV>"
if ( this.spacing != "" ) {
html += "<SPACER TYPE = 'block' WIDTH = " + this.spacing + ">"
}
html += "</TD>"
}
html += "</TR>"
}
html += "</TABLE></BODY></HTML>"
with ( document ) {
open()
write( html )
close()
}
return true
}
// End class definition: buttonBar.