Net::Google::Calendar::WebContent - handle web content


Net-Google-Calendar documentation Contained in the Net-Google-Calendar distribution.

Index


Code Index:

NAME

Top

Net::Google::Calendar::WebContent - handle web content

SYNOPSIS

Top

Web content can be images ...

    my $content = Net::Google::Calendar::WebContent->new(
        title       => 'World Cup',
        href        => 'http://www.google.com/calendar/images/google-holiday.gif',
        web_content => {
            url     => "http://www.google.com/logos/worldcup06.gif" 
            width   => 276,
            height  => 120,
            type    => 'image/gif',
        }
    );
    $entry->add_link($content);

or html ...

    my $content = Net::Google::Calendar::WebContent->new(
        title       => 'Embedded HTML',
        href        => 'http://www.example.com/favico.icon',
        web_content => {
            url     => "http://www.example.com/some.html" 
            width   => 276,
            height  => 120,
            type    => 'text/html',
        }
    );
    $entry->add_link($content);




or special Google Gadgets (http://www.google.com/ig/directory)

    my $content = Net::Google::Calendar::WebContent->new(
        title       => 'DateTime Gadget (a classic!)',
        href        => 'http://www.google.com/favicon.ico',
        web_content => {
            url     => 'http://google.com/ig/modules/datetime.xml',
            width   => 300,
            height  => 136,
            type    => 'application/x-google-gadgets+xml',
        }
    );




or my $content = Net::Google::Calendar::WebContent->new( title => 'Word of the Day', href => 'http://www.thefreedictionary.com/favicon.ico', ); $content->web_content( url => 'http://www.thefreedictionary.com/_/WoD/wod-module.xml', width => 300, height => 136, type => 'application/x-google-gadgets+xml', prefs => { Days => 1, Format => 0 }, );

(note the ability to set webContentGadgetPrefs using the special prefs attribute).

METHODS

Top

new [opt[s]]

Options can be

title

The title of the web content

href A url of an icon to use
type

The mime type of content. Can be either text/html image/* or application/x-google-gadgets+xml

Not needed for text/html.

web_content

The actual web content. This just gets passed to the web_content() method.

web_content [param[s]]

Takes a hash of parameters. Valid are

url

The url of the content.

width

The width of the content.

height

The height of the content.

type

The mime-type (see above)

prefs

This takes a hash ref and all pairs are turned into webContentGadgetPref entries.


Net-Google-Calendar documentation Contained in the Net-Google-Calendar distribution.
package Net::Google::Calendar::WebContent;

use strict;
use XML::Atom;
use XML::Atom::Link;
#use XML::LibXML;
#use XML::Atom::Namespace;
use base qw(XML::Atom::Link Net::Google::Calendar::Base);
use vars qw(@ISA);
unshift @ISA, 'XML::Atom::Link';
my $ns = XML::Atom::Namespace->new(
    gCal => 'http://schemas.google.com/gCal/2005'
);



sub new {
    my $class  = shift;
    my %params = @_;
    
    #my $self   =  XML::Atom::Link->new(Version => "1.0");
    #$self = bless $self, $class;
    my $ns    = XML::Atom::Namespace->new(gd => 'http://schemas.google.com/g/2005');
    my $self = $class->SUPER::new(Version => "1.0", );
    $self->{_gd_ns} = $ns;
    $self->rel('http://schemas.google.com/gCal/2005/webContent');
    for my $field (qw(title href)) {
        die "You must pass in the field '$field' to a WebContent link\n" 
            unless defined $params{$field};
        $self->$field($params{$field}); 
    }
    my $type = $params{type};
    #die "You must pass a type" unless defined $type;
    $self->_set_type($type) if defined $type;

    if ($params{web_content}) {
        $self->web_content(%{$params{web_content}}); 
    } else {
        # h-h-hack
        $self->web_content(empty => 1);
    }
    return $self;
}

sub _set_type {
     my $self = shift;
     my $type = shift;
     unless ($type eq 'text/html' or 
             $type eq 'application/x-google-gadgets+xml' or
             $type =~ m!^image/!) {
         die "The type param must be text/html or application/x-google-gadgets+xml or image/*\n";
     }
     $self->type($type);

}

sub web_content {
    my $self = shift;
    my $name    = 'gCal:webContent';
    if (@_) {
        my %params = @_;
        # h-h-hack
        %params    = () if $params{empty};
        if (my $type = delete $params{type}) {
            $self->_set_type($type);
        }  
        # egregious hack
        $params{'xmlns:gd'}   = 'http://schemas.google.com/g/2005';
        $params{'xmlns:gCal'} = 'http://schemas.google.com/gCal/2005';
        my $prefs   = delete $params{prefs};    
        XML::Atom::Base::set($self, '', $name, '', \%params);
        my $content = $self->_my_get('', $name); 
        foreach my $key (keys %{$prefs}) {
            # TODO: this feels icky
            my $node;
            if (LIBXML) {
                $node = XML::LibXML::Element->new($name.'GadgetPref');
                $node->setAttribute( name  => $key );
                $node->setAttribute( value => $prefs->{$key} );
            } else {
                $node = XML::XPath::Node::Element->new($name.'GadgetPref');
                $node->addAttribute(XML::XPath::Node::Attribute->new(name  => $key));
                $node->addAttribute(XML::XPath::Node::Attribute->new(value => $prefs->{key}));
            }
            $content->appendChild($node);
        }
    }
    return $self->_my_get('', $name);
}

1;