diff options
Diffstat (limited to 'rt/share/html/Elements/EditCustomFieldSelect')
-rw-r--r-- | rt/share/html/Elements/EditCustomFieldSelect | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/rt/share/html/Elements/EditCustomFieldSelect b/rt/share/html/Elements/EditCustomFieldSelect new file mode 100644 index 000000000..8fe79f9f9 --- /dev/null +++ b/rt/share/html/Elements/EditCustomFieldSelect @@ -0,0 +1,161 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> +%# +%# (Except where explicitly superseded by other copyright notices) +%# +%# +%# LICENSE: +%# +%# This work is made available to you under the terms of Version 2 of +%# the GNU General Public License. A copy of that license should have +%# been provided with this software, but in any event can be snarfed +%# from www.gnu.org. +%# +%# This work is distributed in the hope that it will be useful, but +%# WITHOUT ANY WARRANTY; without even the implied warranty of +%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%# General Public License for more details. +%# +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +%# 02110-1301 or visit their web page on the internet at +%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# Build up the set of cascading select boxes as "guides" +%# each one limits the options of the final one a bit +%# (perhaps by tweaking the .display style?) +% my $selected = 0; +% my @category; +% my $id = $NamePrefix . $CustomField->Id; +% my $out = $m->scomp('SELF:options', %ARGS, SelectedRef => \$selected, CategoryRef => \@category); +% if (@category and not $CustomField->BasedOnObj->id) { + <script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/cascaded.js"></script> +%# XXX - Hide this select from w3m? + <select onchange="filter_cascade('<% $id %>-Values', this.value)" name="<% $id %>-Category" class="CF-<%$CustomField->id%>-Edit"> + <option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>-</&></option> +% foreach my $cat (@category) { +% my ($depth, $name) = @$cat; + <option value="<% $name %>"><% ' ' x $depth |n %><% $name %></option> +% } + </select><br /> +% } elsif ($CustomField->BasedOnObj->id) { +<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/cascaded.js"></script> +<script type="text/javascript"><!-- +doOnLoad( function () { + var basedon = document.getElementById('<% $NamePrefix . $CustomField->BasedOnObj->id %>-Values'); + if (basedon != null) { + var oldchange = basedon.onchange; + basedon.onchange = function () { + filter_cascade( + '<% $id %>-Values', + basedon.value, + 1 + ); + if (oldchange != null) + oldchange(); + }; + basedon.onchange(); + } +}); +--></script> +% } +% if (@category) { +%# this hidden select is to supply a full list of values, +%# see filter_cascade() in js/cascaded.js + <select name="<%$id%>-Values-Complete" id="<%$id%>-Values-Complete" class="hidden" disabled="disabled"> + <option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>(no value)</&></option> +% $m->out($out); + </select> +% } +<select + name="<%$id%>-Values" id="<%$id%>-Values" class="CF-<%$CustomField->id%>-Edit" +% if ( $Rows && ( $Multiple || !@category ) ) { + size="<% $Rows %>" +% } +<% $Multiple && qq[multiple="multiple"] |n %> > +<option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>(no value)</&></option> +% $m->out($out); +</select> +<%ARGS> +$Object => undef +$CustomField => undef +$NamePrefix => undef +$Default => undef +$Values => undef +$Multiple => 0 +$Rows => undef +</%ARGS> + +<%METHOD options> +% @Default = grep defined && length, @Default; +% # $Values->HasEntry is too slow here +% if ( !@Default && $Values ) { +% @Default = map $_->Content, @{$Values->ItemsArrayRef}; +% } +% $_ = lc $_ foreach @Default; +% my $selected; +% my $CFVs = $CustomField->Values; +% my @levels; +% while ( my $value = $CFVs->Next ) { +% my $name = $value->Name; +% my $category = $value->Category || ''; +% my $level = (split /:/, $category, 2)[0] || ''; +% while (@levels) { +% if ($levels[-1] eq $level) { +% $level = ''; +% last; +% } elsif (index($level, $levels[-1]) != 0) { +% $m->out('</optgroup>'); +% pop @levels; +% } else { +% last; +% } +% } +% if ( length $level ) { +% push @$CategoryRef, [0+@levels, $level]; + <optgroup style="padding-left: <% @levels/2 %>em" label="<% $category %>"> +% push @levels, $level; +% } + <option value="<% $name %>" +% if ( grep $_ eq lc $name, @Default ) +% { +% $$SelectedRef = 1; + selected="selected" +% } + ><% $name %></option> +% } +% for (@levels) { + </optgroup> +% } +<%ARGS> +$CustomField => undef +@Default => () +$Values => undef +$SelectedRef => undef +$CategoryRef => undef +</%ARGS> +</%METHOD> |