Mozilla::Mechanize::Link - Mimic WWW::Mechanize::Link


Mozilla-Mechanize documentation Contained in the Mozilla-Mechanize distribution.

Index


Code Index:

NAME Mozilla::Mechanize::Link

Top

SYNOPSIS

Top

sorry, read the source for now

DESCRIPTION

Top

The Mozilla::Mechanize::Link object is a thin wrapper around HTML link elements.

METHODS

Top

COPYRIGHT AND LICENSE

Top


Mozilla-Mechanize documentation Contained in the Mozilla-Mechanize distribution.
package Mozilla::Mechanize::Link;
use strict;
use warnings;

# $Id: Link.pm,v 1.3 2005/10/06 18:25:18 slanning Exp $

sub new {
    my $class = shift;
    my $node = shift;
    my $moz = shift;

    my $iid = 0;

    # turn the Node into the appropriate HTMLElement
    if (lc $node->GetNodeName eq 'a') {
        $iid = Mozilla::DOM::HTMLAnchorElement->GetIID;
    } elsif (lc $node->GetNodeName eq 'frame') {
        $iid = Mozilla::DOM::HTMLFrameElement->GetIID;
    } elsif (lc $node->GetNodeName eq 'iframe') {
        $iid = Mozilla::DOM::HTMLIFrameElement->GetIID;
    } elsif (lc $node->GetNodeName eq 'area') {
        $iid = Mozilla::DOM::HTMLAreaElement->GetIID;
    } else {
        my $errstr = "Invalid Link node";
        defined($moz) ? $moz->die($errstr) : die($errstr);
    }
    my $link = $node->QueryInterface($iid);

    my $self = { link => $link };
    $self->{moz} = $moz if defined $moz;
    bless($self, $class);
}

sub url {
    my $self = shift;
    my $link = $self->{link};

    if ($link->GetTagName =~ /^i?frame$/i) {
        return $link->GetSrc;
    } else {
        return $link->GetHref;
    }
}

sub text {
    my $self = shift;
    my $link = $self->{link};

    my $iid = Mozilla::DOM::NSHTMLElement->GetIID;
    my $nshtmlelem = $link->QueryInterface($iid);

    return $nshtmlelem->GetInnerHTML;
}

sub name {
    my $self = shift;
    my $link = $self->{link};

    return $link->HasAttribute('name') ? $link->GetAttribute('name') : '';
}

sub tag {
    my $self = shift;
    my $link = $self->{link};

    return $link->GetTagName;
}

sub click {
    my $self = shift;
    my $link = $self->{link};

    # XXX: maybe this could be done better

    # Create a click event
    my $doc = $link->GetOwnerDocument;
    my $deiid = Mozilla::DOM::DocumentEvent->GetIID();
    my $docevent = $doc->QueryInterface($deiid);
    my $event = $docevent->CreateEvent('MouseEvents');
    $event->InitEvent('click', 1, 1);

    # Dispatch the click event
    my $etiid = Mozilla::DOM::EventTarget->GetIID();
    my $target = $link->QueryInterface($etiid);
    $target->DispatchEvent($event);

    # XXX: if they didn't pass $moz to `new', they're stuck..
    my $moz = $self->{moz} || return;
    $moz->_wait_while_busy();
}


1;

__END__