1package WebminUI::PlainText; 2use WebminCore; 3 4=head2 new WebminUI::PlainText(text, columns) 5Displays a block of plain fixed-width text, within a page or form. 6=cut 7sub new 8{ 9if (defined(&WebminUI::Theme::PlainText::new) && 10 caller() !~ /WebminUI::Theme::PlainText/) { 11 return new WebminUI::Theme::PlainText(@_[1..$#_]); 12 } 13my ($self, $text, $columns) = @_; 14$self = { 'columns' => 80 }; 15bless($self); 16$self->set_text($text); 17$self->set_columns($columns) if (defined($columns)); 18return $self; 19} 20 21=head2 html() 22=cut 23sub html 24{ 25my ($self) = @_; 26my $rv; 27$rv .= "<table border><tr $cb><td><pre>"; 28foreach my $l (&wrap_lines($self->get_text(), $self->get_columns())) { 29 if (length($l) < $self->get_columns()) { 30 $l .= (" " x $self->get_columns() - length($l)); 31 } 32 $rv .= &html_escape($l)."\n"; 33 } 34if (!$self->get_text()) { 35 print (" " x $self->get_columns()),"\n"; 36 } 37$rv .= "</pre></td></tr></table>\n"; 38return $rv; 39} 40 41sub set_text 42{ 43my ($self, $text) = @_; 44$self->{'text'} = $text; 45} 46 47sub get_text 48{ 49my ($self) = @_; 50return $self->{'text'}; 51} 52 53sub set_columns 54{ 55my ($self, $columns) = @_; 56$self->{'columns'} = $columns; 57} 58 59sub get_columns 60{ 61my ($self) = @_; 62return $self->{'columns'}; 63} 64 65# wrap_lines(text, width) 66# Given a multi-line string, return an array of lines wrapped to 67# the given width 68sub wrap_lines 69{ 70local @rv; 71local $w = $_[1]; 72foreach $rest (split(/\n/, $_[0])) { 73 if ($rest =~ /\S/) { 74 while($rest =~ /^(.{1,$w}\S*)\s*([\0-\377]*)$/) { 75 push(@rv, $1); 76 $rest = $2; 77 } 78 } 79 else { 80 # Empty line .. keep as it is 81 push(@rv, $rest); 82 } 83 } 84return @rv; 85} 86 87=head2 set_page(WebminUI::Page) 88Called when this form is added to a page 89=cut 90sub set_page 91{ 92my ($self, $page) = @_; 93$self->{'page'} = $page; 94} 95 961; 97 98