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

Shawn Moore shawn at bestpractical.com
Fri Apr 22 15:17:24 EDT 2016


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

- Log -----------------------------------------------------------------
commit 31e55605116a452efaca9b546b8a914351946f95
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..b9256b0 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<% $clone{$type} || $Object->$type->Count ? q{} : q{ class="unset-field"}|n%>>
     <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..426961e 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} |n%>">
     <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} |n%>">
     <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} |n%>">
     <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} |n%>">
     <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} |n%>">
     <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..1c47fd7 100644
--- a/share/html/Ticket/Elements/ShowPeople
+++ b/share/html/Ticket/Elements/ShowPeople
@@ -75,18 +75,14 @@
     <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<% $Ticket->Cc->MembersObj->Count ? q{} : q{ class="unset-field"} |n%>>
     <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<% $Ticket->AdminCc->MembersObj->Count ? q{} : q{ class="unset-field"} |n%>>
     <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,

commit 76550c7bfdd38fbd82ee70fa98731c0ff5148b28
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 4fe1164c288db1bfef3976781f0157104ca17b19
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 e552469f241fc62c1943c59e4adf8f305022c112
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