/
widget_info.coretag
65 lines (61 loc) · 1.6 KB
/
widget_info.coretag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
UserTag widget-info Order name attribute
UserTag widget-info Version 1.1
UserTag widget-info Routine <<EOR
my %wi_attr = ((map { (lc $_, $_) } qw(
Widget
Documentation
Visibility
Description
Help
Multiple
Version
)), qw(
exists Widget
));
sub {
my ($name, $attr) = @_;
if (length $name) {
# Global or Local?
my $repo = $Global::CodeDef->{Widget};
$repo = $Vend::Cfg->{CodeDef}{Widget} if $Vend::Cfg->{CodeDef}{Widget}{Widget}{$name};
return unless $repo->{Widget}{$name};
if (length $attr) {
# return just one attribute for the given name.
$attr = $wi_attr{lc $attr} or return;
return $repo->{$attr}{$name};
}
else {
# return a hashref with all the available attributes for a given name.
my %build = reverse %wi_attr;
while (my $key = each %build) {
if (exists $repo->{$key}{$name}) {
$build{$key} = $repo->{$key}{$name};
}
else {
delete $build{$key};
}
}
return \%build;
}
}
else {
# return a hashref of hashrefs for all the widgets and their attributes.
my %build = %{$Global::CodeDef->{Widget}{Widget}};
@build{keys %build} = ($Global::CodeDef->{Widget}) x scalar keys %build;
@build{keys %{$Vend::Cfg->{CodeDef}{Widget}{Widget}}} = ($Vend::Cfg->{CodeDef}{Widget}) x scalar keys %{$Vend::Cfg->{CodeDef}{Widget}{Widget}};
foreach my $name (keys %build) {
my $repo = $build{$name};
$build{$name} = {reverse %wi_attr};
while (my $key = each %{$build{$name}}) {
if (exists $repo->{$key}{$name}) {
$build{$name}{$key} = $repo->{$key}{$name};
}
else {
delete $build{$name}{$key};
}
}
}
return \%build;
}
}
EOR