Presenter::Tag: singleton tags
authorSven Schöling <s.schoeling@linet-services.de>
Wed, 27 Dec 2017 10:10:41 +0000 (11:10 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Tue, 2 Jan 2018 13:00:46 +0000 (14:00 +0100)
Vorher wurden alle tags als singleton (also ohne schließenden Tag)
gerendert, wenn sie keinen content hatten. Das geht aber kaputt bei
textarea, weil ein einfaches <textarea> den kompletten folgenden HTML
Code als Content interpretiert.

Ab jetzt werden nur die Tags ohne Content als singleton gerendert, bei
denen das im Standard erlaubt ist.

SL/Presenter/Tag.pm

index 4ed1d92..96b4584 100644 (file)
@@ -20,6 +20,11 @@ my %_valueless_attributes = map { $_ => 1 } qw(
   readonly selected hidden
 );
 
+my %_singleton_tags = map { $_ => 1 } qw(
+  area base br col command embed hr img input keygen link meta param source
+  track wbr
+);
+
 sub _call_on {
   my ($object, $method, @params) = @_;
   return $object->$method(@params);
@@ -58,7 +63,7 @@ sub html_tag {
   my ($tag, $content, %params) = @_;
   my $attributes = stringify_attributes(%params);
 
-  return "<${tag}${attributes}>" unless defined($content);
+  return "<${tag}${attributes}>" if !defined($content) && $_singleton_tags{$tag};
   return "<${tag}${attributes}>${content}</${tag}>";
 }