[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]
[PATCH] CGI.pm DTD and script "type" attributes
Thanks very much. Its just been incorporated into version 2.57.
Lincoln
Aaron J Mackey writes:
>
> These are the changes I needed to make to CGI.pm to have output validate
> cleanly at validator.w3.org/, namely adding the "type" attribute to
> <script> tags generated during start_html and specifying a full DTD,
> including URI.
>
> Here's the patch, if anyone cares for it.
>
> -Aaron
>
> --- /usr/lib/perl5/5.00503/CGI_old.pm Mon Sep 13 21:06:11 1999
> +++ /usr/lib/perl5/5.00503/CGI.pm Tue Jan 11 18:00:53 2000
> @@ -31,7 +31,8 @@
>
> # Change this to the preferred DTD to print in start_html()
> # or use default_dtd('text of DTD to use');
> - $DEFAULT_DTD = '-//IETF//DTD HTML//EN';
> + $DEFAULT_DTD = [ '-//W3C//DTD HTML 4.01 Transitional//EN',
> + 'http://www.w3.org/TR/html4/loose.dtd' ] ;
>
> # Set this to 1 to enable NPH scripts
> # or:
> @@ -1342,8 +1343,20 @@
> $title = $self->escapeHTML($title || 'Untitled Document');
> $author = $self->escape($author);
> my(@result);
> - $dtd = $DEFAULT_DTD unless $dtd && $dtd =~ m|^-//|;
> - push(@result,qq(<!DOCTYPE HTML PUBLIC "$dtd">)) if $dtd;
> + if ($dtd) {
> + if (ref $dtd && $ref eq 'ARRAY') {
> + $dtd = $DEFAULT_DTD unless $dtd->[0] =~ m|^-//|;
> + } else {
> + $dtd = $DEFAULT_DTD unless $dtd =~ m|^-//|;
> + }
> + } else {
> + $dtd = $DEFAULT_DTD;
> + }
> + if (ref($dtd) && ref($dtd) eq 'ARRAY') {
> + push(@result,qq(<!DOCTYPE HTML PUBLIC "$dtd->[0]"\n\t"$dtd->[1]">));
> + } else {
> + push(@result,qq(<!DOCTYPE HTML PUBLIC "$dtd">));
> + }
> push(@result,"<HTML><HEAD><TITLE>$title</TITLE>");
> push(@result,"<LINK REV=MADE HREF=\"mailto:$author\">") if defined $author;
>
> @@ -1408,21 +1421,32 @@
> foreach $script (@scripts) {
> my($src,$code,$language);
> if (ref($script)) { # script is a hash
> - ($src,$code,$language) =
> - $self->rearrange([SRC,CODE,LANGUAGE],
> + ($src,$code,$language, $type) =
> + $self->rearrange([SRC,CODE,LANGUAGE,TYPE],
> '-foo'=>'bar', # a trick to allow the '-' to be omitted
> ref($script) eq 'ARRAY' ? @$script : %$script);
> -
> + # User may not have specified language
> + $language ||= 'JavaScript';
> + unless (defined $type) {
> + $type = lc $language;
> + # strip '1.2' from 'javascript1.2'
> + $type =~ s/^(\D+).*$/text\/$1/;
> + }
> } else {
> - ($src,$code,$language) = ('',$script,'JavaScript');
> + ($src,$code,$language, $type) = ('',$script,'JavaScript', 'text/javascript');
> }
> my(@satts);
> push(@satts,'src'=>$src) if $src;
> - push(@satts,'language'=>$language || 'JavaScript');
> + push(@satts,'language'=>$language);
> + push(@satts,'type'=>$type);
> $code = "<!-- Hide script\n$code\n// End script hiding -->"
> - if $code && $language=~/javascript/i;
> + if $code && $type=~/javascript/i;
> + $code = "<!-- Hide script\n$code\n\# End script hiding -->"
> + if $code && $type=~/perl/i;
> $code = "<!-- Hide script\n$code\n\# End script hiding -->"
> - if $code && $language=~/perl/i;
> + if $code && $type=~/tcl/i;
> + $code = "<!-- Hide script\n$code\n' End script hiding -->"
> + if $code && $type=~/vbscript/i;
> push(@result,script({@satts},$code || ''));
> }
> @result;
> @@ -2757,8 +2781,12 @@
> ####
> 'default_dtd' => <<'END_OF_FUNC',
> sub default_dtd {
> - my ($self,$param) = self_or_CGI(@_);
> - $CGI::DEFAULT_DTD = $param if defined($param);
> + my ($self,$param,$param2) = self_or_CGI(@_);
> + if (defined $param2 && defined $param) {
> + $CGI::DEFAULT_DTD = [ $param, $param2 ];
> + } elsif (defined $param) {
> + $CGI::DEFAULT_DTD = $param;
> + }
> return $CGI::DEFAULT_DTD;
> }
> END_OF_FUNC
--
========================================================================
Lincoln D. Stein Cold Spring Harbor Laboratory
lstein@cshl.org Cold Spring Harbor, NY
========================================================================
- References to:
-
Aaron J Mackey <ajm6q@virginia.edu>
[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]