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&amp;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 )