CSS-SpriteBuilder

 view release on metacpan or  search on metacpan

lib/CSS/SpriteBuilder.pm  view on Meta::CPAN

    }

    return;
}

sub write_xml {
    my ($self, $filename) = @_;

    eval "require XML::LibXML";
    die "XML::LibXML module is required!" if $@;

    my $dom     = XML::LibXML::Document->new();
    my $root_el = $dom->createElement('root');
    $dom->setDocumentElement($root_el);

    while (my ($sprite_image, $images) = each %{ $self->{_sprites} }) {
        my $sprite_el = $dom->createElement('sprite');
        $root_el->appendChild($sprite_el);
        $sprite_el->setAttribute('src', $sprite_image);

        foreach my $image (@$images) {
            my $image_el = $dom->createElement('image');
            $sprite_el->appendChild($image_el);
            while (my ($key, $value) = each %$image) {
                $image_el->setAttribute($key, $value);
            }
        }
    }

    if ($filename) {
        if ( openhandle($filename) ) {
            return $dom->toFH($filename, 2);
        }
        else {
            return $dom->toFile($filename, 2);
        }
    }

    return $dom->toString(2);
}

sub write_html {
    my ($self, $filename) = @_;

    my ($fh, $str);

    if ($filename) {
        if ( openhandle($filename) ) {
            $fh = $filename;
        }
        else {
            open($fh, '>', $filename) or die "Can't to open file '$filename'!";
        }
    }
    else {
        $str = '';
        open($fh, '>', \$str) or die "Can't to create file handle!";
    }

    print $fh <<HTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>CSS::SpriteBuilder generated page</title>
    <style type="text/css">
        .container {
            width: 800px;
            margin: 0 auto;
            text-align: center;
            font-size: 12px;
        }
        table {
            border-collapse: collapse;
            width: 100%;
        }
        th, td {
            border: 1px solid;
            text-align: center;
            padding: 8px;
        }
        .spr {
            display: -moz-inline-stack;
            display: inline-block;
            zoom: 1;
            *display: inline;
            background-repeat: no-repeat;
        }
HTML

    $self->write_css($fh);

    print $fh <<HTML;
    </style>
</head>
<body>
    <div class="container">
    <h3>CSS::SpriteBuilder generated page</h3>
    <table>
        <thead>
            <tr>
                <th>Image</th>
                <th>CSS selector</th>
                <th>Sprite</th>
                <th>Pos</th>
            </tr>
        </thead>
        <tbody>
HTML

    while (my ($sprite_image, $images) = each %{ $self->{_sprites} }) {
        for (my $i = 0; $i < scalar @$images; $i++) {
            my $image_info = $images->[$i];
            my $selector   = $image_info->{selector};

            my $rule = $selector =~ /^#/
                ? 'class="spr" id="'. substr($selector, 1) .'"'
                : 'class="spr '. substr($selector, 1) .'"'
            ;

            if ($image_info->{repeat} eq 'x') {
                $rule .= ' style="width:'. $image_info->{width} * 3 .'px;"';



( run in 0.832 second using v1.01-cache-2.11-cpan-d0baa829c65 )