%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
%# <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
%#
%# SYNOPSIS
%#
-%# include javascript:
-%# <& /Widgets/SelectionBox:header &>
-%#
%# <%init>:
%# my $sel = $m->comp ('/Widgets/SelectionBox:new',
-%# Action => me.html',
-%# Name => 'my-selection',
-%# Available => \@items,
+%# Action => me.html',
+%# Name => 'my-selection',
+%# Available => \@items,
%# # you can do things with @{$sel->{Current}} in the
%# # OnSubmit callback
-%# OnSubmit => sub { my $sel = shift; },
-%# Selected => \@selected);
+%# OnSubmit => sub { my $sel = shift; },
+%# Selected => \@selected);
%#
%# $m->comp ('/Widgets/SelectionBox:process', %ARGS, self => $sel)
%#
%# <& /Widgets/SelectionBox:show, self => $sel &>
%#
%# if the SelectionBox is created with AutoSave option, OnSubmit will be called
-%# on every button clicked in non-js mode.
-<%method header>
-% unless ($nojs) {
-<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/class.js"></script>
-<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/list.js"></script>
-% }
-<%ARGS>
-$nojs => 0
-</%ARGS>
-</%method>
-
+%# on every button clicked
<%method new>
<%init>
$ARGS{_item_map} = {map {$_->[0] => $_->[1]} @{$ARGS{Available}}};
$self->{Selected} = [$self->{Selected}];
}
-if ($ARGS{fromjs}) {
- $self->{Current} = $self->{Selected};
+my $current = $self->{Current} = $ARGS{$self->{Name}.'-Current'};
+if ($current && !ref ($current)) {
+ $current = [$current];
}
-else {
- my $current = $self->{Current} = $ARGS{$self->{Name}.'-Current'};
- if ($current && !ref ($current)) {
- $current = [$current];
- }
- unless ($self->{ReadOnly}) {
- ++$self->{Modified};
- if ($ARGS{add}) {
- my $choosed = $ARGS{$self->{Name}.'-Available'};
- for my $add (ref($choosed) ? @$choosed : $choosed) {
- next if grep { $_ eq $add } @$current;
- push @$current, $add;
- }
+unless ($self->{ReadOnly}) {
+ ++$self->{Modified};
+ if ($ARGS{add}) {
+ my $choosed = $ARGS{$self->{Name}.'-Available'};
+ for my $add (ref($choosed) ? @$choosed : $choosed) {
+ next if grep { $_ eq $add } @$current;
+ push @$current, $add;
}
+ }
- if ($ARGS{remove}) {
- my $choosed = $ARGS{$self->{Name}.'-Selected'};
- for my $del (ref($choosed) ? @$choosed : $choosed) {
- @$current = map { $_ eq $del ? () : $_ } @$current;
- }
+ if ($ARGS{remove}) {
+ my $choosed = $ARGS{$self->{Name}.'-Selected'};
+ for my $del (ref($choosed) ? @$choosed : $choosed) {
+ @$current = map { $_ eq $del ? () : $_ } @$current;
}
+ }
- if ($ARGS{moveup} or $ARGS{movedown}) {
- my $offset = $ARGS{moveup} ? 1 : 0;
- my $choosed = $ARGS{$self->{Name}.'-Selected'};
- $choosed = [$choosed] unless ref ($choosed);
- my $canmove = 0; # not in the cornor
- for my $i ($ARGS{moveup} ? 0..$#{$current} : reverse 0..$#{$current}) {
- if (grep {$_ eq $current->[$i]} @$choosed) {
- if ($canmove) {
- splice (@$current, $i-$offset, 2,
- @{$current}[$i+1-$offset,$i-$offset]);
- }
- }
- else {
- ++$canmove;
- }
+ if ($ARGS{moveup} or $ARGS{movedown}) {
+ my $offset = $ARGS{moveup} ? 1 : 0;
+ my $choosed = $ARGS{$self->{Name}.'-Selected'};
+ $choosed = [$choosed] unless ref ($choosed);
+ my $canmove = 0; # not in the cornor
+ for my $i ($ARGS{moveup} ? 0..$#{$current} : reverse 0..$#{$current}) {
+ if (grep {$_ eq $current->[$i]} @$choosed) {
+ if ($canmove) {
+ splice (@$current, $i-$offset, 2,
+ @{$current}[$i+1-$offset,$i-$offset]);
+ }
+ }
+ else {
+ ++$canmove;
}
}
+ }
- if ($ARGS{clear}) {
- $current = [];
- }
-
- $self->{Current} = $current;
+ if ($ARGS{clear}) {
+ $current = [];
}
+
+ $self->{Current} = $current;
}
@{$self->{Current}} = grep { exists $self->{_item_map}{$_} } @{$self->{Current}};
</%method>
<%method show>
-<form method="post" action="<%$self->{Action}%>" name="SelectionBox-<% $name %>" id="SelectionBox-<% $name %>"
-% unless ($nojs) {
-onsubmit="list_<% $name %>.selectAll();"
-% }
->
+<form method="post" action="<%$self->{Action}%>" name="SelectionBox-<% $name %>" id="SelectionBox-<% $name %>">
<input type="hidden" class="hidden" name="<% $self->{Name} %>-Submit" value="1" />
<& SelectionBox:current, self => $self &>
-<input type="hidden" class="hidden" name="fromjs" value="0" />
<&|/l&>Available</&>:
<br />
<select name="<%$name%>-Available" id="<%$name%>-Available" size="<%$size%>" multiple="multiple">
</select>
% unless ($self->{ReadOnly}) {
-<input name="add" type="submit" class="button" value=" → " />
+<input aria-label="Add" name="add" type="submit" class="button" value=" → " />
% }
<select name="<%$name%>-Selected" id="<%$name%>-Selected" size="<%$size%>" multiple="multiple">
</select>
% unless ($self->{'ReadOnly'}) {
% unless ($ARGS{'NoArrows'}) {
- <input name="moveup" type="submit" class="button" value=" ↑ " />
- <input name="movedown" type="submit" class="button" value=" ↓ " />
+ <input aria-label="Move up" name="moveup" type="submit" class="button" value=" ↑ " />
+ <input aria-label="Move down" name="movedown" type="submit" class="button" value=" ↓ " />
% }
<input name="remove" type="submit" class="button" value="<&|/l&>Delete</&>" />
% if ($ARGS{'Clear'}) {
% }
</form>
-% unless ($nojs) {
-<script type="text/javascript">
-//<![CDATA[
-var list_<%$name%> = new list(document.getElementById("SelectionBox-<% $name %>"), 0, "list_<%$name%>");
-//]]>
-</script>
-% }
<%ARGS>
$self => undef
$size => 10
-$nojs => 0
</%ARGS>
<%INIT>
my $name = $self->{Name};