PPresenter

 view release on metacpan or  search on metacpan

PPresenter/Export/Website/HTML.pm  view on Meta::CPAN

# Copyright (C) 2000-2002, Free Software Foundation FSF.

package PPresenter::Export::Website::HTML;

use strict;
use vars '@ISA';

use PPresenter::Export;
use base 'PPresenter::Export';

# Produce web-pages for the slides.
# The module contains a lot of small routines to simplify extention
# and adaptation to personal needs.

use constant ObjDefaults =>
{ -name         => 'Website producer'
, -aliases      => undef

, -slideAs      => 'IMAGE'        # IMAGE, TABLE, LINEAR, or SKIP
, -notesAs      => 'SKIP'         #     same

, -outputDir    => 'html'
, -indexFile    => 'index.html'
};

sub makeSlides($$)
{   my ($export, $show, $parent) = @_;

    return if 'Cancel' eq $parent->Dialog
    (   -title    => 'Starting Export'
    ,   -text     => <<TEXT
Starting the export of you presentation into a website.

Each of the slides will be shown, and then has its picture taken.

Do not touch your mouse while the processing is going on.
TEXT
    ,   -bitmap   => 'info'
    ,   -buttons  => [ 'OK', 'Cancel' ]
    )->Show;

    $show->busy(1);

    my $dir    = $export->{-outputDir};
    -d $dir || mkdir $dir, 0755
        or die "Cannot create directory $dir: $^E.\n";
 
    my @slides      = $export->selectedSlides($show);
    my @viewports   = $export->selectedViewports($show);

    my (@slidelinks, @mainlinks);
    $export->mapExportedPhases
    ( $show
    , sub { my ($export, $show, $slide, $viewports) = @_;
            push @slidelinks, $export->slide2slidelink($slide);
            push @mainlinks,  $export->main2slidelink($slide);
          }
    );

    my ($previous, $this, $next) = (undef, undef, shift @slidelinks);

    $export->mapExportedPhases
    ( $show
    , sub { my ($export, $show, $slide, $viewports) = @_;
            ($previous, $this, $next) = ($this, $next, shift @slidelinks);
            $export->makeSlide($show, $slide, $viewports
              , $export->slide2filename($slide), $previous, $next);
          }
    );

    $export->makeMainPage($show, $export->slide2filename, \@mainlinks );

    $show->busy(0);

    $parent->Dialog
    (   -title    => 'Ready'
    ,   -text     => 'The website is ready.'
    ,   -bitmap   => 'info'
    ,   -buttons  => [ 'OK' ]
    )->Show;

    $export;
}

sub slide2slidelink($)
{   my ($export, $slide) = @_;
    my $slidename = $export->slide2linkname($slide);
    my $link      = $export->slide2slide($slide);
    "<A HREF=$link>$slidename</A>";
}

sub main2slidelink($)
{   my ($export, $slide) = @_;
    my $slidename = $export->slide2linkname($slide);
    my $link      = $export->main2slide($slide);
    "<A HREF=$link>$slidename</A>";
}

my @views;
sub makeSlide($$$$$$)
{   my ($export, $show, $slide, $vps, $file, $previous, $next) = @_;

    print PPresenter::TRACE "Working on slide $slide, phase "
         , $slide->phase, ", file $file.\n";

    my ($slidename, $showname) = ("$slide", "$show");
    my $title  = $export->Title($show, $slide);
    my $chapter= $export->Chapter($show, $slide);

    my $logo   = $export->PageLogo($show, $slide);
    my $vindex = $export->VerticalIndex($show, $slide, $previous, $next);
    my $commer = $export->Commercial($show, $slide);

    open HTML, ">$file" or die "Cannot write to file $file.\n";
    my $oldout = select HTML;

    print $export->Header( $show, $slide, $logo, $title, $chapter
                         , $commer, $vindex);

    @views     = ();
    $export->mapSlideViewports($show, $slide, $vps
    , sub {shift->makeSlideView(@_)}
    );

    my $extra  = $export->ExtraText($show, $slide);
    my $hindex = $export->HorizontalIndex($show, $slide, $previous, $next);
    my $sig    = $export->Signature($show, $slide);
    my $footer = $export->Footer($show, $slide, $hindex, $sig);

    local $"   = "<P>";
    print "<CENTER>@views</CENTER>\n$extra\n$footer\n";

    select $oldout;



( run in 0.717 second using v1.01-cache-2.11-cpan-39bf76dae61 )