/usr/local/CPAN/Mozilla-DOM/Range.pm
# This example shows how to use the DocumentRange and Range classes.
# [incomplete - not sure really how useful it is]
#
# $CVSHeader$
package Range;
use strict;
use warnings;
use Cwd 'getcwd';
use Glib qw(TRUE FALSE);
use Gtk2;
use Gtk2::MozEmbed '0.04';
use Mozilla::DOM '0.18'; # for DocumentRange
use Glib::Object::Subclass Gtk2::Window::;
sub INIT_INSTANCE {
my $self = shift;
my $embed = Gtk2::MozEmbed->new();
$embed->signal_connect(net_stop => \&net_stop_cb);
$self->add($embed);
my $cwd = getcwd();
$embed->load_url("file://$cwd/index.html");
$self->{_embed} = $embed;
}
sub net_stop_cb {
my $embed = shift;
my $browser = $embed->get_nsIWebBrowser;
my $window = $browser->GetContentDOMWindow;
my $selection = $window->GetSelection;
my $doc = $window->GetDocument;
my $docelem = $doc->GetDocumentElement;
my $eiid = Mozilla::DOM::NSHTMLElement->GetIID;
my $nshtmlelement = $docelem->QueryInterface($eiid);
# Switch to DocumentRange interface from Document
my $iid = Mozilla::DOM::DocumentRange->GetIID;
my $docrange = $doc->QueryInterface($iid);
# Create a range (var range = document.createRange();)
# See section 2.3 of the DOM Range specification.
my $range = $docrange->CreateRange();
$range->SelectNode($docelem);
# Print out the *text* of the selected nodes
# (no markup)
$selection->AddRange($range);
print $selection->ToString, $/;
}
1;