# -----------------------------------------------------------------------------

=encoding utf8

=head1 NAME

Quiq::Html::Widget::TextField - Einzeiliges Textfeld

=head1 BASE CLASS

L<Quiq::Html::Widget>

=head1 ATTRIBUTES

=over 4

=item id => $id (Default: undef)

Id des Textfelds.

=item class => $class (Default: undef)

CSS Klasse des Textfelds.

=item style => $style (Default: undef)

CSS Definition (inline).

=item disabled => $bool (Default: 0)

Widget kann nicht editiert werden.

=item hidden => $bool (Default: 0)

Widget ist (aktuell) unsichtbar.

=item maxLength => $n (Default: Wert von "size")

Maximale Länge des Eingabewerts in Zeichen. Ein Wert von "0" beutet
keine Eingabebegrenzung.

=item name => $name (Default: undef)

Name des Textfelds.

=item onKeyUp => $js (Default: undef)

JavaScript-Handler.

=item password => $bool (Default: 0)

Wenn gesetzt, wird der Eingawert verschleiert.

=item readonly => $bool (Default: 0)

Zeige das Feld und seinen Wert unveränderbar an.

=item size => $n (Default: undef)

Breite des Feldes in Zeichen.

=item title => $text (Default: undef)

Text Tooltip.

=item undefIf => $bool (Default: 0)

Wenn wahr, liefere C<undef> als Widget-Code.

=item value => $str (Default: undef)

Anfänglicher Wert des Textfelds.

=back

=cut

# -----------------------------------------------------------------------------

package Quiq::Html::Widget::TextField;
use base qw/Quiq::Html::Widget/;

use v5.10;
use strict;
use warnings;

our $VERSION = '1.233';

# -----------------------------------------------------------------------------

=head1 METHODS

=head2 Konstruktor

=head3 new() - Konstruktor

=head4 Synopsis

  $e = $class->new(@keyVal);

=cut

# -----------------------------------------------------------------------------

sub new {
    my $class = shift;
    # @_: @keyVal

    # Defaultwerte

    my $self = $class->SUPER::new(
        class => undef,
        disabled => 0,
        hidden => 0,
        id => undef,
        maxLength => undef,
        name => undef,
        onKeyUp => undef,
        password => 0,
        readonly => 0,
        size => undef,
        style => undef,
        title => undef,
        undefIf => 0,
        value => undef,
    );

    # Werte Konstruktoraufruf
    $self->set(@_);

    return $self;
}

# -----------------------------------------------------------------------------

=head2 Objektmethoden

=head3 html() - Generiere HTML-Code

=head4 Synopsis

  $html = $e->html($h);
  $html = $class->html($h,@keyVal);

=cut

# -----------------------------------------------------------------------------

sub html {
    my $this = shift;
    my $h = shift;
    # @_: @keyVal

    my $self = ref $this? $this: $this->new(@_);

    # Attribute

    my ($class,$disabled,$id,$maxLength,$name,$onKeyUp,$password,
        $readonly,$size,$style, $title,$undefIf,$value) =
        $self->get(qw/class disabled id maxLength name onKeyUp password
        readonly size style title undefIf value/);

    if (!defined $maxLength) {
        $maxLength = $size;
    }
    elsif ($maxLength == 0) {
        $maxLength = undef;
    }

    # Whitespace entfernen

    if (defined $value) {
        $value =~ s/^\s+//;
        $value =~ s/\s+$//;
    }

    # Generierung

    if ($undefIf) {
        return undef;
    }

    return $h->tag('input',
        type => $password? 'password': 'text',
        id => $id,
        class => $class,
        style => $style,
        name => $name,
        readonly => $readonly,
        disabled => $disabled,
        onkeyup => $onKeyUp,
        size => $size,
        maxlength => $maxLength,
        value => $value,
        title => $title,
    );    
}

# -----------------------------------------------------------------------------

=head1 VERSION

1.233

=head1 AUTHOR

Frank Seitz, L<http://fseitz.de/>

=head1 COPYRIGHT

Copyright (C) 2025 Frank Seitz

=head1 LICENSE

This code is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

# -----------------------------------------------------------------------------

1;

# eof
