Solstice::Button::Flyout - Models flyout buttons with nested actions.


Solstice documentation Contained in the Solstice distribution.

Index


Code Index:

NAME

Top

Solstice::Button::Flyout - Models flyout buttons with nested actions.

SYNOPSIS

Top

  use Solstice::Button:Flyout;

  See L<Solstice::Button|Solstice::Button> for usage.

DESCRIPTION

Top

ee Solstice::Button for description.

Superclass

Solstice::Button

Export

No symbols exported.

Methods

setFlyouts(\@buttons)

Set a reference to a list of button objects comprising the flyout menu.

getFlyouts()

Returns a reference to a list of flyout button objects.

setStyleClass($string)

Set a style class for the menu.

getStyleClass()

Return a style class for the menu.

Returns HTML for a text link.

Returns HTML for an image link.

Return HTML for a combination image/text link.

Private Methods

_generateInlineScript()
_getAccessorDefinition()

Modules Used

Solstice::Button, StringLibrary (StringLibrary).

AUTHOR

Top

Catalyst Group, <catalyst@u.washington.edu>

VERSION

Top

$Revision: 3364 $

COPYRIGHT

Top


Solstice documentation Contained in the Solstice distribution.
package Solstice::Button::Flyout;

# $Id: Flyout.pm 3364 2006-05-05 07:18:21Z mcrawfor $

use 5.006_000;
use strict;
use warnings;

use base qw(Solstice::Button);

use Solstice::StringLibrary qw(strtojavascript);

our ($VERSION) = ('$Revision: 3364 $' =~ /^\$Revision:\s*([\d.]*)/);

sub getTextLink {
    my $self = shift;

    return $self->SUPER::getTextLink() if $self->{'_disabled'};
    return $self->getNoscriptButton() unless $self->{'_has_javascript'}; 
    
    my $name     = $self->{'_name'} || '';
    my $label    = $self->_generateLabel(); 
    my $tooltip  = $self->_generateTooltip();
    my $title    = $self->_generateTitle(); 
    my $jstitle  = $self->_generateScriptTitle(); 
    my $tabindex = defined $self->{'_tabindex'} ? $self->{'_tabindex'} : 0;
    my $script   = $self->_generateInlineScript();
    
    if (defined $tooltip) {
        $self->getOnloadService()->addEvent("Solstice.addToolTip('link_$name', '$tooltip')");
    }

    return qq|<a id="link_$name" href="javascript:void(0);" title="$title" tabindex="$tabindex" onmouseover="window.status='$jstitle'; return true;" onmouseout="window.status=''; return true;" onclick="Solstice.Flyout.menuReg.openMenu('$name', event);" oncontextmenu="Solstice.Flyout.menuReg.openMenu('$name', event); return false;">$label</a>$script|;
}

sub getImageLink {
    my $self = shift;

    return $self->SUPER::getImageLink() if $self->{'_disabled'};
    return $self->getNoscriptImage() unless $self->{'_has_javascript'};

    my $name     = $self->{'_name'}  || '';
    my $tooltip  = $self->_generateTooltip();
    my $title    = $self->_generateTitle(); 
    my $jstitle  = $self->_generateScriptTitle(); 
    my $tabindex = defined $self->{'_tabindex'} ? $self->{'_tabindex'} : 0;
    my $image    = $self->{'_image'} || '';
    my $alt      = $self->{'_title'}  || '';
    my $script   = $self->_generateInlineScript();

    if (defined $tooltip) {
        $self->getOnloadService()->addEvent("Solstice.addToolTip('img_$name', '$tooltip')");
    }

    return qq|<a id="img_$name" href="javascript:void(0);" tabindex="$tabindex" title="$title" onmouseover="window.status='$jstitle'; return true;" onmouseout="window.status=''; return true;" onclick="Solstice.Flyout.menuReg.openMenu('$name', event);" oncontextmenu="Solstice.Flyout.menuReg.openMenu('$name', event); return false;"><img src="$image" alt=""/></a>$script|;
}

sub getImageTextLink {
    my $self = shift;
    
    return $self->SUPER::getImageTextLink() if $self->{'_disabled'};
    unless ($self->{'_has_javascript'}) {
        return ($self->getNoscriptImage() . ' ' . $self->getNoscriptButton());
    }

    my $name     = $self->{'_name'}  || '';
    my $label    = $self->_generateLabel(); 
    my $tooltip  = $self->_generateTooltip();
    my $title    = $self->_generateTitle(); 
    my $jstitle  = $self->_generateScriptTitle(); 
    my $tabindex = defined $self->{'_tabindex'} ? $self->{'_tabindex'} : 0;
    my $image    = $self->{'_image'} || '';
    my $script   = $self->_generateInlineScript();

    if (defined $tooltip) {
        $self->getOnloadService()->addEvent("Solstice.addToolTip('img_text_$name', '$tooltip')");
    }
    
    return qq|<a id="img_text_$name" href="javascript:void(0);" tabindex="$tabindex" title="$title" onmouseover="window.status='$jstitle'; return true;" onmouseout="window.status=''; return true;" onclick="Solstice.Flyout.menuReg.openMenu('$name', event);" oncontextmenu="Solstice.Flyout.menuReg.openMenu('$name', event); return false;"><img src="$image" alt=""/></a> <a href="javascript:void(0);" tabindex="$tabindex" onmouseover="window.status='$jstitle'; return true;" onmouseout="window.status=''; return true;" onclick="Solstice.Flyout.menuReg.openMenu('$name', event);" oncontextmenu="Solstice.Flyout.menuReg.openMenu('$name', event); return false;" title="$title">$label</a>$script|;
}

sub addFlyoutButton {
    my $self = shift;
    my $button= shift;
    
    $self->{'_flyouts'} = [] unless defined $self->{'_flyouts'};
    push @{$self->{'_flyouts'}}, $button;
    
    return $button;
}

sub getPseudoButton {
    my $self = shift;

    return $self->SUPER::getPseudoButton() if $self->{'_disabled'};
    return $self->getNoscriptButton() unless $self->{'_has_javascript'};

    my $name     = $self->{'_name'} || '';
    my $label    = $self->_generateLabel();  
    my $tooltip  = $self->_generateTooltip();
    my $title    = $self->_generateTitle();
    my $jstitle  = $self->_generateScriptTitle();
    my $tabindex = defined $self->{'_tabindex'} ? $self->{'_tabindex'} : 0;
    my $script   = $self->_generateInlineScript();

    if (defined $tooltip) {
        $self->getOnloadService()->addEvent("Solstice.addToolTip('img_text_$name', '$tooltip')");
    }

    return qq|<div id="pseudo_$name"  title="$title" tabindex="$tabindex" onmouseover="this.style.cursor='pointer'; return true;" onmouseout="window.status=''; return true;" onclick="Solstice.Flyout.menuReg.openMenu('$name', event);" oncontextmenu="Solstice.Flyout.menuReg.openMenu('$name', event); return false;">$label</div>$script|;
}

sub _generateInlineScript {
    my $self = shift;

    my $flyout_attributes = join ',', map {
        'new Array(\''.($_->{'_name'} || '').'\', \''.
        $_->_generateScriptLabel().'\', \''.
        $_->_generateScriptTitle().'\', \''.
        ($_->{'_url'} || '').'\', '.
        (defined $_->{'_action'} ? 'false' : 'true').', '.
        (defined $_->{'_disabled'} && $_->{'_disabled'} == 1 ? 'true' : 'false').', '.
        (defined $_->{'_checked'} && $_->{'_checked'} == 1 ? 'true' : 'false').', \''.
        strtojavascript($_->{'_client_action'} || '').'\')' } @{$self->{'_flyouts'}};

    my $script = '<script type="text/javascript">';
    $script .= $self->{'_classname'} ? 'var menu = ' : '';
    $script .= 'Solstice.Flyout.menuReg.createMenu("'.($self->{'_name'} || '').'", new Array('.$flyout_attributes.'));'; 
    $script .= (' menu.setStyleClass("'.$self->{'_classname'}.'")') if $self->{'_classname'};
    $script .= '</script>';
    
    return $script;
}

sub _getAccessorDefinition {
    return [
        {
            name => 'Flyouts',
            key  => '_flyouts',
            type => 'ArrayRef',
        },
        {
            name => 'StyleClass',
            key  => '_classname',
            type => 'String',
        },
    ];
}

1;
__END__