[Rt-commit] rt branch, 4.4/toggle-unset-fields, created. rt-4.4.0-86-g2f9d771

Shawn Moore shawn at bestpractical.com
Mon May 2 15:34:27 EDT 2016


The branch, 4.4/toggle-unset-fields has been created
        at  2f9d771b186a04c203813bfa2a1a940b79f7b4c7 (commit)

- Log -----------------------------------------------------------------
commit 3b0f4ba0a3ce86f9b665975096af1f2ae46ef687
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Fri Apr 22 19:06:59 2016 +0000

    Use CSS, rather than excluding HTML elements, for "hide unset fields"
    
        Which also allows administrators to customize the display of unset fields
        as desired, rather than simply "present or absent".
    
        This also adds a HideUnsetFields parameter to the ticket display page
        which can be used to override the user preference.
    
        This is the first step towards toggling hide/show unset fields with
        JavaScript.

diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm
index f01337c..25b3367 100644
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@ -1425,6 +1425,8 @@ our %WHITELISTED_COMPONENT_ARGS = (
     '/Ticket/Update.html' => ['QuoteTransaction', 'Action', 'DefaultStatus'],
     # Action->Extract Article on a ticket's menu
     '/Articles/Article/ExtractIntoClass.html' => ['Ticket'],
+    # Only affects display
+    '/Ticket/Display.html' => ['HideUnsetFields'],
 );
 
 # Components which are blacklisted from automatic, argument-based whitelisting.
diff --git a/share/html/Elements/ShowLinks b/share/html/Elements/ShowLinks
index e7ab61d..afe55e1 100644
--- a/share/html/Elements/ShowLinks
+++ b/share/html/Elements/ShowLinks
@@ -47,8 +47,7 @@
 %# END BPS TAGGED BLOCK }}}
 <table>
 % for my $type (@display) {
-% if ( !RT->Config->Get('HideUnsetFieldsOnDisplay', $session{CurrentUser}) || $clone{$type} || $Object->$type->Count ) {
-  <tr>
+  <tr class="<%$type%><% $clone{$type} || $Object->$type->Count ? q{} : q{ unset-field}%>">
     <td class="labeltop">
       <& ShowRelationLabel, Object => $Object, Label => $labels{$type}.':', Relation => $type &>
 %     if ($clone{$type}) {
@@ -59,7 +58,7 @@
       <& ShowLinksOfType, Object => $Object, Type => $type, Recurse => ($type eq 'Members') &>
     </td>
   </tr>
-% } }
+% }
 
 % # Allow people to add more rows to the table
 % $m->callback( %ARGS );
diff --git a/share/html/Ticket/Display.html b/share/html/Ticket/Display.html
index 5620e39..92d6fe9 100644
--- a/share/html/Ticket/Display.html
+++ b/share/html/Ticket/Display.html
@@ -57,7 +57,7 @@
 <& Elements/ShowDependencyStatus, Ticket => $TicketObj &>
 
 % $m->callback( %ARGS, Ticket => $TicketObj, Transactions => $transactions, Attachments => $attachments, CallbackName => 'BeforeShowSummary' );
-<div class="summary">
+<div class="summary unset-fields-container<% $HideUnsetFields ? ' unset-fields-hidden' : '' %>">
 <&| /Widgets/TitleBox, title => loc('Ticket metadata') &>
 <& /Ticket/Elements/ShowSummary,  Ticket => $TicketObj, Attachments => $attachments &>
 </&>
@@ -102,6 +102,7 @@
 $id => undef
 $TicketObj => undef
 $ShowHeaders => 0
+$HideUnsetFields => RT->Config->Get('HideUnsetFieldsOnDisplay', $session{CurrentUser})
 $ForceShowHistory => 0
 </%ARGS>
 
diff --git a/share/html/Ticket/Elements/ShowDates b/share/html/Ticket/Elements/ShowDates
index c476c79..f6a24ea 100644
--- a/share/html/Ticket/Elements/ShowDates
+++ b/share/html/Ticket/Elements/ShowDates
@@ -51,22 +51,17 @@
     <td class="value"><% $Ticket->CreatedObj->AsString %></td>
   </tr>
 % $m->callback( %ARGS, CallbackName => 'AfterCreated', TicketObj => $Ticket );
-% if ( !$hide_unset_fields || $Ticket->StartsObj->Unix ) {
-  <tr class="date starts">
+  <tr class="date starts<% $Ticket->StartsObj->Unix ? q{} : q{ unset-field}%>">
     <td class="label"><&|/l&>Starts</&>:</td>\
     <td class="value"><% $Ticket->StartsObj->AsString %></td>
   </tr>
 % $m->callback( %ARGS, CallbackName => 'AfterStarts', TicketObj => $Ticket );
-% }
-% if ( !$hide_unset_fields || $Ticket->StartedObj->Unix ) {
-  <tr class="date started">
+  <tr class="date started<% $Ticket->StartedObj->Unix ? q{} : q{ unset-field}%>">
     <td class="label"><&|/l&>Started</&>:</td>\
     <td class="value"><% $Ticket->StartedObj->AsString %></td>
   </tr>
 % $m->callback( %ARGS, CallbackName => 'AfterStarted', TicketObj => $Ticket );
-% }
-% if ( !$hide_unset_fields || $Ticket->ToldObj->Unix || $Ticket->CurrentUserHasRight('ModifyTicket') ) {
-  <tr class="date told">
+  <tr class="date told<% $Ticket->ToldObj->Unix || $Ticket->CurrentUserHasRight('ModifyTicket') ? q{} : q{ unset-field}%>">
     <td class="label">
 % if ( $Ticket->CurrentUserHasRight('ModifyTicket' ) ) {
 <a href="<% RT->Config->Get('WebPath') %>/Ticket/Display.html?id=<% $Ticket->id %>&Action=SetTold"><&|/l&>Last Contact</&></a>:
@@ -76,28 +71,23 @@
 </td><td class="value"><% $Ticket->ToldObj->AsString %></td>
   </tr>
 % $m->callback( %ARGS, CallbackName => 'AfterTold', TicketObj => $Ticket );
-% }
 
-% if ( !$hide_unset_fields || $Ticket->DueObj->Unix ) {
-  <tr class="date due">
+  <tr class="date due<% $Ticket->DueObj->Unix ? q{} : q{ unset-field}%>">
     <td class="label"><&|/l&>Due</&>:</td>\
 % my $due = $Ticket->DueObj;
-% if ( !$hide_unset_fields || $due && $due->IsSet && $due->Diff < 0 && $Ticket->QueueObj->IsActiveStatus($Ticket->Status) ) {
+% if ( $due && $due->IsSet && $due->Diff < 0 && $Ticket->QueueObj->IsActiveStatus($Ticket->Status) ) {
     <td class="value"><span class="overdue"><% $due->AsString  %></span></td>
 % } else {
     <td class="value"><% $due->AsString  %></td>
 % }
   </tr>
 % $m->callback( %ARGS, CallbackName => 'AfterDue', TicketObj => $Ticket );
-% }
 
-% if ( !$hide_unset_fields || $Ticket->ResolvedObj->Unix ) {
-  <tr class="date resolved">
+  <tr class="date resolved<% $Ticket->ResolvedObj->Unix ? q{} : q{ unset-field}%>">
     <td class="label"><&|/l&>Closed</&>:</td>\
     <td class="value"><% $Ticket->ResolvedObj->AsString  %></td>
   </tr>
 % $m->callback( %ARGS, CallbackName => 'AfterResolved', TicketObj => $Ticket );
-% }
 
   <tr class="date updated">
     <td class="label"><&|/l&>Updated</&>:</td>\
@@ -117,8 +107,6 @@ $Ticket => undef
 $UpdatedLink => 1
 </%ARGS>
 <%INIT>
-my $hide_unset_fields = RT->Config->Get('HideUnsetFieldsOnDisplay', $session{CurrentUser});
-
 if ($UpdatedLink and $Ticket) {
     my $txns = $Ticket->Transactions;
     $txns->OrderByCols(
diff --git a/share/html/Ticket/Elements/ShowPeople b/share/html/Ticket/Elements/ShowPeople
index bb50e8f..f31e907 100644
--- a/share/html/Ticket/Elements/ShowPeople
+++ b/share/html/Ticket/Elements/ShowPeople
@@ -46,7 +46,7 @@
 %#
 %# END BPS TAGGED BLOCK }}}
 <table>
-  <tr>
+  <tr class="owner">
     <td class="label"><&|/l&>Owner</&>:</td>
 % my $owner = $Ticket->OwnerObj;
     <td class="value"><& /Elements/ShowUser, User => $owner, Ticket => $Ticket &>
@@ -71,22 +71,18 @@
   </tr>
 % }
 
-  <tr>
+  <tr class="requestors">
     <td class="labeltop"><&|/l&>Requestors</&>:</td>
     <td class="value"><& ShowGroupMembers, Group => $Ticket->Requestors, Ticket => $Ticket &></td>
   </tr>
-% if ( !$hide_unset_fields || $Ticket->Cc->MembersObj->Count ) {
-  <tr>
+  <tr class="cc<% $Ticket->Cc->MembersObj->Count ? q{} : q{ unset-field}%>">
     <td class="labeltop"><&|/l&>Cc</&>:</td>
     <td class="value"><& ShowGroupMembers, Group => $Ticket->Cc, Ticket => $Ticket &></td>
   </tr>
-% }
-% if ( !$hide_unset_fields || $Ticket->AdminCc->MembersObj->Count ) {
-  <tr>
+  <tr class="admincc<% $Ticket->AdminCc->MembersObj->Count ? q{} : q{ unset-field}%>">
     <td class="labeltop"><&|/l&>AdminCc</&>:</td>
     <td class="value"><& ShowGroupMembers, Group => $Ticket->AdminCc, Ticket => $Ticket &></td>
   </tr>
-% }
 
 % my $multi_roles = $Ticket->QueueObj->CustomRoles;
 % $multi_roles->LimitToMultipleValue;
@@ -99,9 +95,6 @@
 
   <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket, Grouping => 'People', Table => 0 &>
 </table>
-<%INIT>
-my $hide_unset_fields = RT->Config->Get('HideUnsetFieldsOnDisplay', $session{CurrentUser});
-</%INIT>
 <%ARGS>
 $Ticket => undef
 </%ARGS>
diff --git a/share/static/css/base/ticket.css b/share/static/css/base/ticket.css
index cfe3768..0fec787 100644
--- a/share/static/css/base/ticket.css
+++ b/share/static/css/base/ticket.css
@@ -117,6 +117,9 @@ div.requestor-ticket-links {
     margin-bottom: 0;
 }
 
+.unset-fields-hidden .unset-field {
+    display: none !important;
+}
 
 /* textareas get to be bigger when we're in a table */
 tr.edit-custom-field.cftype-Text textarea,
diff --git a/t/web/ticket_display_unset_fields.t b/t/web/ticket_display_unset_fields.t
index 8556c26..09a7701 100644
--- a/t/web/ticket_display_unset_fields.t
+++ b/t/web/ticket_display_unset_fields.t
@@ -3,13 +3,13 @@ use warnings;
 
 use RT::Test tests => undef, config => 'Set( $HideUnsetFieldsOnDisplay, 1 );';
 
-my @link_labels = (
-    'Depends on',
-    'Depended on by',
-    'Parents',
-    'Children',
-    'Refers to',
-    'Referred to by',
+my @link_classes = qw(
+    DependsOn
+    DependedOnBy
+    MemberOf
+    Members
+    RefersTo
+    ReferredToBy
 );
 
 my $foo = RT::Test->create_ticket(
@@ -40,23 +40,23 @@ diag "test with root";
     $m->login;
     $m->goto_ticket( $foo->id );
 
-    for my $label (qw/Starts Started Closed Cc AdminCc/) {
-        $m->content_lacks( "$label:", "lacks $label as value is unset" );
+    my $dom = $m->dom;
+
+    for my $class (qw/starts started due resolved cc admincc/) {
+        is $dom->find(qq{tr.$class.unset-field})->size, 1, "found unset $class";
     }
 
-    # there is one Due: in reminder
-    $m->content_unlike( qr/Due:.*Due:/s, "lacks Due as value is unset" );
+    is $dom->find(qq{tr.told:not(.unset-field)})->size, 1, "has Told as root can modify it";
 
-    $m->content_contains( "Last Contact", "has Told as root can set it" );
-    for my $label (@link_labels) {
-        $m->content_contains( "$label:", "has $label as root can create" );
+    for my $class (@link_classes) {
+        is $dom->find(qq{tr.$class:not(.unset-field)})->size, 1, "has $class as root can create";
     }
 
     $m->goto_ticket( $bar->id );
-    for my $label (qw/Starts Started Closed Cc AdminCc/) {
-        $m->content_contains( "$label:", "has $label as value is set" );
+    $dom = $m->dom;
+    for my $class (qw/starts started due resolved cc admincc/) {
+        is $dom->find(qq{tr.$class:not(.unset-field)})->size, 1, "has $class as value is set";
     }
-    $m->content_like( qr/Due:.*Due:/s, "has Due as value is set" );
 }
 
 diag "test without ModifyTicket right";
@@ -66,13 +66,15 @@ diag "test without ModifyTicket right";
     RT::Test->set_rights( Principal => $user, Right => ['ShowTicket'] );
     $m->login( 'foo', 'password', logout => 1 );
     $m->goto_ticket( $foo->id );
-    $m->content_lacks( "Last Contact", "lacks Told as it is unset" );
-    for my $label ( @link_labels ) {
-        $m->content_lacks( "$label:", "lacks $label as it is unset" );
+    my $dom = $m->dom;
+    is $dom->find(qq{tr.told.unset-field})->size, 1, "lacks Told as it is unset and user has no modify right";
+    for my $class ( @link_classes ) {
+        is $dom->find(qq{tr.$class.unset-field})->size, 1, "lacks $class as it is unset and user has no modify right";
     }
 
     $m->goto_ticket( $bar->id );
-    $m->content_contains( "Depends on:", "has Depends on as it is set" );
+    $dom = $m->dom;
+    is $dom->find(qq{tr.DependsOn:not(.unset-field)})->size, 1, "has Depends on as it is set";
 }
 
 undef $m;

commit d7015116fa685b19c895bf30396b45b6d33b6ce8
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Fri Apr 22 19:08:26 2016 +0000

    Allow user to toggle "hide unset fields" with a click
    
    Fixes: I#31523

diff --git a/share/html/Ticket/Display.html b/share/html/Ticket/Display.html
index 92d6fe9..bc709df 100644
--- a/share/html/Ticket/Display.html
+++ b/share/html/Ticket/Display.html
@@ -57,8 +57,19 @@
 <& Elements/ShowDependencyStatus, Ticket => $TicketObj &>
 
 % $m->callback( %ARGS, Ticket => $TicketObj, Transactions => $transactions, Attachments => $attachments, CallbackName => 'BeforeShowSummary' );
+
+<%PERL>
+my $show_all  = $m->interp->apply_escapes( loc("Show unset fields"), 'j' );
+my $show_html = $m->interp->apply_escapes( loc("Show unset fields"), 'h' );
+my $hide_all  = $m->interp->apply_escapes( loc("Hide unset fields"), 'j' );
+my $hide_html = $m->interp->apply_escapes( loc("Hide unset fields"), 'h' );
+my $initial_label = $HideUnsetFields ? $show_html : $hide_html;
+
+my $titleright = qq{<a href="#" onclick="return toggle_hide_unset(this, $show_all, $hide_all)">$initial_label</a>};
+</%PERL>
+
 <div class="summary unset-fields-container<% $HideUnsetFields ? ' unset-fields-hidden' : '' %>">
-<&| /Widgets/TitleBox, title => loc('Ticket metadata') &>
+<&| /Widgets/TitleBox, title => loc('Ticket metadata'), titleright_raw => $titleright &>
 <& /Ticket/Elements/ShowSummary,  Ticket => $TicketObj, Attachments => $attachments &>
 </&>
 </div>
diff --git a/share/static/js/util.js b/share/static/js/util.js
index 45b3948..3471cd0 100644
--- a/share/static/js/util.js
+++ b/share/static/js/util.js
@@ -565,3 +565,17 @@ function scrollToJQueryObject(obj) {
     }
 }
 
+function toggle_hide_unset(e, showmsg, hidemsg) {
+    var link      = jQuery(e);
+    var container = link.closest(".unset-fields-container");
+    container.toggleClass('unset-fields-hidden');
+
+    if (container.hasClass('unset-fields-hidden')) {
+        link.text(showmsg);
+    }
+    else {
+        link.text(hidemsg);
+    }
+
+    return false;
+}

commit 0c111ccfb10a40d64d2fd3ead726bd04cb075741
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Fri Apr 22 19:10:38 2016 +0000

    Allow hide/show unset fields link to function without JS

diff --git a/share/html/Ticket/Display.html b/share/html/Ticket/Display.html
index bc709df..1ae3ef5 100644
--- a/share/html/Ticket/Display.html
+++ b/share/html/Ticket/Display.html
@@ -65,7 +65,10 @@ my $hide_all  = $m->interp->apply_escapes( loc("Hide unset fields"), 'j' );
 my $hide_html = $m->interp->apply_escapes( loc("Hide unset fields"), 'h' );
 my $initial_label = $HideUnsetFields ? $show_html : $hide_html;
 
-my $titleright = qq{<a href="#" onclick="return toggle_hide_unset(this, $show_all, $hide_all)">$initial_label</a>};
+my $url = "?HideUnsetFields=" . ($HideUnsetFields ? 0 : 1) . ";id=$id";
+my $url_html = $m->interp->apply_escapes($url, 'h');
+
+my $titleright = qq{<a href="$url_html" onclick="return toggle_hide_unset(this, $show_all, $hide_all)">$initial_label</a>};
 </%PERL>
 
 <div class="summary unset-fields-container<% $HideUnsetFields ? ' unset-fields-hidden' : '' %>">

commit 2f9d771b186a04c203813bfa2a1a940b79f7b4c7
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Fri Apr 22 19:15:10 2016 +0000

    Use data-* attributes rather than JavaScript function parameters
    
        Markup is preferable over code!

diff --git a/share/html/Ticket/Display.html b/share/html/Ticket/Display.html
index 1ae3ef5..2ee8382 100644
--- a/share/html/Ticket/Display.html
+++ b/share/html/Ticket/Display.html
@@ -59,16 +59,14 @@
 % $m->callback( %ARGS, Ticket => $TicketObj, Transactions => $transactions, Attachments => $attachments, CallbackName => 'BeforeShowSummary' );
 
 <%PERL>
-my $show_all  = $m->interp->apply_escapes( loc("Show unset fields"), 'j' );
-my $show_html = $m->interp->apply_escapes( loc("Show unset fields"), 'h' );
-my $hide_all  = $m->interp->apply_escapes( loc("Hide unset fields"), 'j' );
-my $hide_html = $m->interp->apply_escapes( loc("Hide unset fields"), 'h' );
-my $initial_label = $HideUnsetFields ? $show_html : $hide_html;
+my $show_label    = $m->interp->apply_escapes( loc("Show unset fields"), 'h' );
+my $hide_label    = $m->interp->apply_escapes( loc("Hide unset fields"), 'h' );
+my $initial_label = $HideUnsetFields ? $show_label : $hide_label;
 
 my $url = "?HideUnsetFields=" . ($HideUnsetFields ? 0 : 1) . ";id=$id";
 my $url_html = $m->interp->apply_escapes($url, 'h');
 
-my $titleright = qq{<a href="$url_html" onclick="return toggle_hide_unset(this, $show_all, $hide_all)">$initial_label</a>};
+my $titleright = qq{<a href="$url_html" data-show-label="$show_label" data-hide-label="$hide_label" onclick="return toggle_hide_unset(this)">$initial_label</a>};
 </%PERL>
 
 <div class="summary unset-fields-container<% $HideUnsetFields ? ' unset-fields-hidden' : '' %>">
diff --git a/share/static/js/util.js b/share/static/js/util.js
index 3471cd0..433580c 100644
--- a/share/static/js/util.js
+++ b/share/static/js/util.js
@@ -565,16 +565,16 @@ function scrollToJQueryObject(obj) {
     }
 }
 
-function toggle_hide_unset(e, showmsg, hidemsg) {
+function toggle_hide_unset(e) {
     var link      = jQuery(e);
     var container = link.closest(".unset-fields-container");
     container.toggleClass('unset-fields-hidden');
 
     if (container.hasClass('unset-fields-hidden')) {
-        link.text(showmsg);
+        link.text(link.data('show-label'));
     }
     else {
-        link.text(hidemsg);
+        link.text(link.data('hide-label'));
     }
 
     return false;

-----------------------------------------------------------------------


More information about the rt-commit mailing list