————# -----------------------------------------------------------------------------
=encoding utf8
=head1 NAME
Quiq::JQuery::MenuBar - Erzeuge den Code einer jQuery Menüleiste
=head1 BASE CLASS
L<Quiq::Hash>
=head1 DESCRIPTION
Die Klasse erzeugt den HTML-Code einer jQuery UI menüleiste.
Dem Konstruktor werden die Menüpunktdefintionen mit dem Attribut
C<items> übergeben. Die Methode L<html|"html() - Generiere HTML">() generiert den HTML-Code.
Homepage:
=over 2
=item *
=back
Quelldateien:
=over 2
=item *
=item *
=back
B<Achtung:> Der Code läuft nur mit jQuery UI 1.11.4!
=over 2
=item *
=item *
=back
=head1 ATTRIBUTES
=over 4
=item id => $id (Default: 'menubar')
(String) CSS-Id der Menüleiste
=item items => \@arr (Default: [])
(Array of Hashes) Definition der Menüpunkte.
=item style => $style
CSS-Style.
=back
=cut
# -----------------------------------------------------------------------------
package
Quiq::JQuery::MenuBar;
use
v5.10;
use
strict;
use
warnings;
our
$VERSION
=
'1.225'
;
# -----------------------------------------------------------------------------
=head1 METHODS
=head2 Konstruktor
=head3 new() - Instantiiere Objekt
=head4 Synopsis
$obj = $class->new(@keyVal);
=head4 Description
Instantiiere ein Menüleisten-Objekt und liefere eine
Referenz auf dieses Objekt zurück.
=cut
# -----------------------------------------------------------------------------
sub
new {
my
$class
=
shift
;
# @_: @keyVal
my
$self
=
$class
->SUPER::new(
id
=>
'menubar'
,
items
=> [],
style
=>
undef
,
);
$self
->set(
@_
);
return
$self
;
}
# -----------------------------------------------------------------------------
=head2 Objektmethoden
=head3 html() - Generiere HTML
=head4 Synopsis
$html = $obj->html($h);
$html = $class->html($h,@keyVal);
=head4 Description
Generiere den HTML-Code eines Menüleisten-Objekts und liefere
diesen zurück. Als Klassenmethode gerufen, wird das Objekt intern
mit den Attributen @keyVal instantiiert.
=cut
# -----------------------------------------------------------------------------
sub
html {
my
$this
=
shift
;
my
$h
=
shift
;
my
$self
=
ref
$this
?
$this
:
$this
->new(
@_
);
my
(
$id
,
$itemA
,
$style
) =
$self
->get(
qw/id items style/
);
if
(!
@$itemA
) {
return
''
;
}
$style
=
$style
?
"$style; display: none"
:
'display: none'
;
# Menüstruktur rekursiv erzeugen
my
$sub
;
$sub
=
sub
{
my
$itemA
=
shift
;
my
$i
=
shift
// 1;
my
$html
=
''
;
for
my
$itm
(
@$itemA
) {
my
$name
=
$itm
->{
'name'
};
my
$url
=
$itm
->{
'url'
};
my
$icon
=
$itm
->{
'icon'
};
if
(
$icon
) {
$name
=
$h
->tag(
'span'
,
-ignoreIfNull
=> 0,
class
=>
"ui-icon $icon"
).
$name
;
}
my
$tag
=
$url
?
$h
->tag(
'a'
,
href
=>
$url
,
$name
):
$name
;
if
(
my
$itemA
=
$itm
->{
'childs'
}) {
$tag
.=
"\n"
.
$sub
->(
$itemA
,
$i
+1);
}
$html
.=
$h
->tag(
'li'
,
$tag
);
}
$html
=
$h
->tag(
'ul'
,
$i
== 1? (
id
=>
$id
): (),
style
=>
$style
,
$html
);
return
$html
;
};
my
$html
=
$sub
->(
$itemA
);
$html
.=
$h
->tag(
'script'
,
q~
var o = $('#menubar');
o.menubar();
o.show();
~
),
return
$html
;
}
# -----------------------------------------------------------------------------
=head1 VERSION
1.225
=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