HTML-Menu-TreeView
view release on metacpan or search on metacpan
examples/edit.pl view on Meta::CPAN
],
'id' => 'a1',
'rid' => 1
},
{
'text' => 'Examples',
'subtree' => [
{
'target' => 'rightFrame',
'text' => 'OO Syntax',
'href' => 'oo.pl',
'subtree' => [
{
'target' => 'rightFrame',
'text' => 'Source',
'href' => 'ooSource.pl',
'subtree' => [],
'rid' => 7,
'id' => 'a7'
}
],
'rid' => 6,
'id' => 'a6'
},
{
'target' => 'rightFrame',
'href' => 'fo.pl',
'text' => 'FO Syntax',
'subtree' => [
{
'target' => 'rightFrame',
'text' => 'Source',
'href' => 'foSource.pl',
'subtree' => [],
'id' => 'a9',
'rid' => 9
}
],
'id' => 'a8',
'rid' => 8
},
{
'target' => 'rightFrame',
'href' => 'crystal.pl',
'text' => 'Crystal',
'subtree' => [
{
'target' => 'rightFrame',
'href' => 'crystalSource.pl',
'text' => 'Source',
'subtree' => [],
'id' => 'a11',
'rid' => 11
}
],
'id' => 'a10',
'rid' => 10
},
{
'target' => 'rightFrame',
'text' => 'Sort the Treeview',
'href' => 'folderFirst.pl',
'subtree' => [
{
'target' => 'rightFrame',
'href' => 'folderSource.pl',
'text' => 'Source',
'subtree' => [],
'id' => 'a13',
'rid' => 13
}
],
'id' => 'a12',
'rid' => 12
},
{
'target' => 'rightFrame',
'href' => 'edit.pl',
'text' => 'Edit',
'subtree' => [
{
'target' => 'rightFrame',
'href' => 'editSource.pl',
'text' => 'Source',
'subtree' => [],
'id' => 'a15',
'rid' => 15
}
],
'id' => 'a14',
'rid' => 14
},
{
'target' => 'rightFrame',
'href' => 'select.pl',
'text' => 'Select',
'subtree' => [
{
'target' => 'rightFrame',
'text' => 'Source',
'href' => 'selectSource.pl',
'subtree' => [],
'rid' => 17,
'id' => 'a17'
}
],
'rid' => 16,
'id' => 'a16'
},
{
'target' => 'rightFrame',
'href' => 'open.pl',
'text' => 'Closed Folder ',
'subtree' => [
{
'target' => 'rightFrame',
'href' => 'openSource.pl',
'text' => 'Source',
'subtree' => [],
'id' => 'a19',
'rid' => 'a19'
examples/edit.pl view on Meta::CPAN
-class => "treeviewLink$size"
},
'32'
)
. ' | '
. a(
{
-href => './edit.pl?style=Crystal&size=48',
-class => "treeviewLink$size"
},
'48'
)
);
print(
header(),
start_html(
-title => 'Edit',
-script => jscript() . preload() . $jspart,
-style => {
-code => css() . qq|
.moveHereContent{
background-color:rgba(214, 210, 208,0.9);
-webkit-box-shadow:0px 0px 1px rgba(0,0,0,0.4);/*black */
-moz-box-shadow:0px 0px 1px rgba(0,0,0,0.4);/*black */
box-shadow:0px 0px 1px black;
z-index:3;
}
.moveButton{
background-color:rgba(255,255,255,0.1);
cursor:pointer;
}
.moveButton:hover{
background-color:rgba(134, 171, 218,0.2);
cursor:pointer;
}
|
}
),
$zoom
. br() . '
<div id="moveHere" style="display:none;" class="moveHereContent" width="100px"></div>
<script language="javascript" type="text/javascript">
if (typeof document.body.onselectstart!="undefined") //ie
document.body.onselectstart=function(){return false};
else if (typeof document.body.style.MozUserSelect!="undefined") //gecko
document.body.style.MozUserSelect="none";
else //Opera
document.body.onmousedown=function(){return false}
document.body.style.cursor = "default";
</script>
<table align="center" class="mainborder" cellpadding="0" cellspacing="0" summary="mainLayout" ><tr><td align="left">'
);
my $m_nPrid = param('rid');
$m_nPrid =~ s/^a(.*)/$1/;
SWITCH: {
if ( $action eq 'newEntry' ) {
&newEntry();
last SWITCH;
} ## end if ( $action eq 'newEntry')
if ( $action eq 'saveTreeviewEntry' ) {
&saveTreeviewEntry();
last SWITCH;
} ## end if ( $action eq 'saveTreeviewEntry')
if ( $action eq 'addTreeviewEntry' ) {
&addTreeviewEntry();
last SWITCH;
} ## end if ( $action eq 'addTreeviewEntry')
if ( $action eq 'editable' ) {
&updateTree( \@tree );
TrOver(1);
print Tree( \@tree );
last SWITCH;
} ## end if ( $action eq 'editable')
if ( $action eq 'editTreeviewEntry' ) {
&editTreeviewEntry();
last SWITCH;
} ## end if ( $action eq 'editTreeviewEntry')
if ( $action eq 'deleteTreeviewEntry' ) {
deleteTreeviewEntry();
last SWITCH;
} ## end if ( $action eq 'deleteTreeviewEntry')
if ( $action eq 'upEntry' ) {
&upEntry();
last SWITCH;
} ## end if ( $action eq 'upEntry')
if ( $action eq 'downEntry' ) {
downEntry();
last SWITCH;
} ## end if ( $action eq 'downEntry')
if ( $action eq 'MoveTreeViewEntry' ) {
MoveTreeViewEntry();
last SWITCH;
} ## end if ( $action eq 'MoveTreeViewEntry')
print Tree( \@tree );
} ## end SWITCH:
print "$m_sContent</td></tr></table>", end_html;
sub saveTreeviewEntry {
&load();
&saveEntry( \@tree, $m_nPrid );
&updateTree( \@tree );
TrOver(1);
$m_sContent .= br();
$m_sContent .= table(
{
align => 'center',
width => '*'
},
Tr( td( Tree( \@tree ) ) )
);
TrOver(0);
} ## end sub saveTreeviewEntry
sub addTreeviewEntry {
&load();
&addEntry( \@tree, $m_nPrid );
&updateTree( \@tree );
TrOver(1);
$m_sContent .= br();
$m_sContent .= table(
{
align => 'center',
width => '*'
},
Tr( td( Tree( \@tree ) ) )
);
TrOver(0);
} ## end sub addTreeviewEntry
sub editTreeview {
&load();
&rid();
saveTree( $dump, \@tree );
&updateTree( \@tree );
TrOver(1);
$m_sContent .= br();
$m_sContent .= table(
{
align => 'center',
width => '*'
},
Tr( td( Tree( \@tree ) ) )
);
TrOver(0);
} ## end sub editTreeview
sub editTreeviewEntry {
&load();
&editEntry( \@tree, $m_nPrid );
} ## end sub editTreeviewEntry
sub deleteTreeviewEntry {
&load();
&deleteEntry( \@tree, $m_nPrid );
&updateTree( \@tree );
TrOver(1);
$m_sContent .= br();
$m_sContent .= table(
{
align => 'center',
width => '*'
},
Tr( td( Tree( \@tree ) ) )
);
TrOver(0);
} ## end sub deleteTreeviewEntry
sub upEntry {
&load();
&sortUp( \@tree, $m_nPrid );
&updateTree( \@tree );
TrOver(1);
$m_sContent .= br();
$m_sContent .= table(
{
align => 'center',
width => '*'
},
Tr( td( Tree( \@tree ) ) )
);
TrOver(0);
} ## end sub upEntry
sub MoveTreeViewEntry {
&load();
my $f = param('from');
$f =~ s/^a(.*)/$1/;
my $t = param('to');
$t =~ s/^a(.*)/$1/;
&getEntry( \@tree, $f, $t );
&rid();
saveTree( $dump, \@tree );
&updateTree( \@tree );
TrOver(1);
$m_sContent .= table(
{
align => 'center',
width => '*'
},
Tr( td( Tree( \@tree ) ) )
);
TrOver(0);
} ## end sub MoveTreeViewEntry
sub moveEntry {
my $t = shift;
my $find = shift;
for ( my $i = 0 ; $i <= @$t ; $i++ ) {
next if ref @$t[$i] ne "HASH";
if ( @$t[$i] ) {
if ( @$t[$i]->{rid} == $find && defined $tN->{id} ) {
splice @$t, $i, 0, $tN;
return 1;
} ## end if ( @$t[$i]->{rid} ==...)
if ( defined @{ @$t[$i]->{subtree} } ) {
moveEntry( \@{ @$t[$i]->{subtree} }, $find );
} ## end if ( defined @{ @$t[$i...]})
} ## end if ( @$t[$i] )
} ## end for ( my $i = 0 ; $i <=...)
} ## end sub moveEntry
sub getEntry {
my $t = shift;
my $find = shift;
my $goto = shift;
for ( my $i = 0 ; $i < @$t ; $i++ ) {
next if ref @$t[$i] ne "HASH";
if ( @$t[$i]->{rid} == $find ) {
$tN->{$_} = @$t[$i]->{$_} foreach keys %{ @$t[$i] };
splice @$t, $i, 1;
moveEntry( \@tree, $goto );
} elsif ( defined @{ @$t[$i]->{subtree} } ) {
getEntry( \@{ @$t[$i]->{subtree} }, $find, $goto );
} ## end elsif ( defined @{ @$t[$i...]})
} ## end for ( my $i = 0 ; $i < ...)
} ## end sub getEntry
sub downEntry {
&load();
$down = 1;
&sortUp( \@tree, $m_nPrid );
&updateTree( \@tree );
TrOver(1);
$m_sContent .= table(
{
align => 'center',
width => '*'
},
Tr( td( Tree( \@tree ) ) )
);
TrOver(0);
} ## end sub downEntry
sub newEntry {
$m_sContent .=
qq(<b>New Entry</b><form action="$ENV{SCRIPT_NAME}#a$m_nPrid"><br/><table align="center" class="mainborder" cellpadding="2" cellspacing="2" summary="mainLayolut"><tr><td>Text:</td><td><input type="text" value="" name="text"></td></tr><tr><td>Folder<...
my $node = help();
foreach my $key ( sort( keys %{$node} ) ) {
$m_sContent .= qq(<tr><td></td><td>$node->{$key}</td></tr><tr><td>$key :</td><td><input type="text" value="" name="$key"/><br/></td></tr>)
if ( $key ne 'class' );
} ## end foreach my $key ( sort( keys...))
$m_sContent .=
'<tr><td><input type="hidden" name="action" value="addTreeviewEntry"/><input type="hidden" name="rid" value="a'
. $m_nPrid
. '"></td><td><input type="submit"/></td></tr></table></form>';
} ## end sub newEntry
sub addEntry {
my $t = shift;
my $find = shift;
for ( my $i = 0 ; $i < @$t ; $i++ ) {
if ( @$t[$i]->{rid} == $find ) {
my %params = Vars();
my $node = {};
foreach my $key ( sort( keys %params ) ) {
$node->{$key} = $params{$key}
if ( $params{$key}
&& $key ne 'action'
&& $key ne 'folder'
&& $key ne 'subtree'
&& $key ne 'class'
&& $key ne 'dump' );
$node->{$key} = "$ENV{SCRIPT_NAME}?action=$1"
if ( $key eq 'href' && $params{$key} =~ /^action:\/\/(.*)$/ );
} ## end foreach my $key ( sort( keys...))
if ( param('folder') ) {
$node->{'subtree'} = [
{
text => 'Empty Folder',
}
];
} ## end if ( param('folder') )
splice @$t, $i, 0, $node;
&rid();
saveTree( $dump, \@tree );
return;
} elsif ( defined @{ @$t[$i]->{subtree} } ) {
&addEntry( \@{ @$t[$i]->{subtree} }, $find );
} ## end elsif ( defined @{ @$t[$i...]})
} ## end for ( my $i = 0 ; $i < ...)
} ## end sub addEntry
sub saveEntry {
my $t = shift;
my $find = shift;
for ( my $i = 0 ; $i < @$t ; $i++ ) {
if ( @$t[$i]->{rid} == $find ) {
my %params = Vars();
foreach my $key ( sort keys %params ) {
@$t[$i]->{$key} = $params{$key}
if ( $params{$key}
&& $key ne 'action'
&& $key ne 'folder'
&& $key ne 'subtree'
&& $key ne 'class'
&& $key ne 'dump' );
@$t[$i]->{$key} = "$ENV{SCRIPT_NAME}?action=$1"
if ( $key eq 'href' && $params{$key} =~ /^action:\/\/(.*)$/ );
} ## end foreach my $key ( sort keys...)
saveTree( $dump, \@tree );
return;
} elsif ( defined @{ @$t[$i]->{subtree} } ) {
&saveEntry( \@{ @$t[$i]->{subtree} }, $find );
} ## end elsif ( defined @{ @$t[$i...]})
} ## end for ( my $i = 0 ; $i < ...)
} ## end sub saveEntry
sub editEntry {
my $t = shift;
my $find = shift;
my $href = "$ENV{SCRIPT_NAME}?action=editTreeviewEntry";
for ( my $i = 0 ; $i < @$t ; $i++ ) {
if ( @$t[$i]->{rid} == $find ) {
$m_sContent .= br();
$m_sContent .= "<b>"
. @$t[$i]->{text}
. '</b><form action="'
. $href
. "#a$m_nPrid"
. '><table align=" center " class=" mainborder " cellpadding="0" cellspacing="0" summary="mainLayolut">';
language('de') if $ENV{HTTP_ACCEPT_LANGUAGE} =~ /^de.*/;
my $node = help();
foreach my $key ( sort( keys %{ @$t[$i] } ) ) {
$m_sContent .= "<tr><td></td><td>$node->{$key}</td></tr>"
if ( defined $node->{$key} );
$m_sContent .= qq(<tr><td>$key </td><td><input type="text" value="@$t[$i]->{$key}" name="$key"></td></tr>)
if ( $key ne 'subtree'
&& $key ne 'rid'
&& $key ne 'action'
&& $key ne 'dump'
&& $key ne 'class'
&& $key ne 'addition' );
} ## end foreach my $key ( sort( keys...))
foreach my $key2 ( sort( keys %{$node} ) ) {
unless ( defined @$t[$i]->{$key2} ) {
$m_sContent .=
qq(<tr><td></td><td>$node->{$key2}</td></tr><tr><td>$key2 :</td><td><input type="text" value="" name="$key2"/><br/></td></tr>);
} ## end unless ( defined @$t[$i]->...)
} ## end foreach my $key2 ( sort( keys...))
$m_sContent .=
qq(<tr><td><input type="hidden" name="action" value="saveTreeviewEntry"/><input type="hidden" name="rid" value="@$t[$i]->{id}"/></td><td><input type="submit" value="save"/></td></tr></table></form>);
saveTree( $dump, \@tree );
return;
} elsif ( defined @{ @$t[$i]->{subtree} } ) {
&editEntry( \@{ @$t[$i]->{subtree} }, $find );
} ## end elsif ( defined @{ @$t[$i...]})
} ## end for ( my $i = 0 ; $i < ...)
} ## end sub editEntry
sub sortUp {
my $t = shift;
my $find = shift;
for ( my $i = 0 ; $i <= @$t ; $i++ ) {
if ( defined @$t[$i] ) {
if ( @$t[$i]->{rid} == $find ) {
$i++ if ($down);
return if ( ( $down && $i == @$t ) or ( !$down && $i == 0 ) );
splice @$t, $i - 1, 2, ( @$t[$i], @$t[ $i - 1 ] );
saveTree( $dump, \@tree );
} ## end if ( @$t[$i]->{rid} ==...)
if ( defined @{ @$t[$i]->{subtree} } ) {
sortUp( \@{ @$t[$i]->{subtree} }, $find );
saveTree( $dump, \@tree );
} ## end if ( defined @{ @$t[$i...]})
} ## end if ( defined @$t[$i] )
} ## end for ( my $i = 0 ; $i <=...)
} ## end sub sortUp
sub deleteEntry {
my $t = shift;
my $find = shift;
for ( my $i = 0 ; $i < @$t ; $i++ ) {
if ( @$t[$i]->{rid} == $find ) {
splice @$t, $i, 1;
saveTree( $dump, \@tree );
} elsif ( defined @{ @$t[$i]->{subtree} } ) {
deleteEntry( \@{ @$t[$i]->{subtree} }, $find );
} ## end elsif ( defined @{ @$t[$i...]})
} ## end for ( my $i = 0 ; $i < ...)
} ## end sub deleteEntry
sub updateTree {
my $t = shift;
for ( my $i = 0 ; $i < @$t ; $i++ ) {
if ( defined @$t[$i] ) {
@$t[$i]->{onmouseup} = "confirmMove()";
@$t[$i]->{id} = @$t[$i]->{id};
@$t[$i]->{name} = @$t[$i]->{rid};
@$t[$i]->{onmousedown} = "prepareMove('" . @$t[$i]->{id} . "')";
@$t[$i]->{onmousemove} = "enableDropZone('" . @$t[$i]->{id} . "')";
@$t[$i]->{onmouseout} = "disableDropZone('" . @$t[$i]->{id} . "')";
@$t[$i]->{addition} = qq(<table border="0" cellpadding="0" cellspacing="0" align="right" summary="layout"><tr>
<td><a class="treeviewLink$size" target="_blank" title="@$t[$i]->{text}" href="@$t[$i]->{href}"><img src="/style/$m_sStyle/$size/mimetypes/www.png" border="0" alt=""/></a></td>
<td ><a class="treeviewLink$size" href="$ENV{SCRIPT_NAME}?action=editTreeviewEntry&rid=@$t[$i]->{id}"><img src="/style/$m_sStyle/$size/mimetypes/edit.png" border="0" alt="edit"/></a></td><td><a class="treeviewLink$size" href="$ENV{SCRIPT_NAME}?ac...
@$t[$i]->{href} = '';
updateTree( \@{ @$t[$i]->{subtree} } ) if ( defined @{ @$t[$i]->{subtree} } );
} ## end if ( defined @$t[$i] )
} ## end for ( my $i = 0 ; $i < ...)
} ## end sub updateTree
sub rid {
no warnings;
$m_nRid = 0;
&getRid( \@tree );
sub getRid {
my $t = shift;
for ( my $i = 0 ; $i < @$t ; $i++ ) {
$m_nRid++;
next unless ref @$t[$i] eq "HASH";
@$t[$i]->{rid} = $m_nRid;
@$t[$i]->{id} = "a$m_nRid";
getRid( \@{ @$t[$i]->{subtree} } ) if ( defined @{ @$t[$i]->{subtree} } );
} ## end for ( my $i = 0 ; $i < ...)
} ## end sub getRid
} ## end sub rid
sub load {
if ( -e $dump ) {
loadTree($dump);
*tree = \@{ $HTML::Menu::TreeView::TreeView[0] };
} ## end if ( -e $dump )
} ## end sub load
1;
( run in 0.330 second using v1.01-cache-2.11-cpan-8644d7adfcd )