[Rt-commit] rt branch, 4.6-theme/ticket-pages, repushed
Craig Kaiser
craig at bestpractical.com
Fri May 10 11:51:39 EDT 2019
The branch 4.6-theme/ticket-pages was deleted and repushed:
was b51534875b71e48940be08f441bcc76759cb1862
now 7a038a2dd50b07a4f94dc8dbd4dfec0aea646a16
1: 7f13f0055 = 1: 7f13f0055 Allow for multiple base themes by avoiding showing any to the user
2: 0ce97154b = 2: 0ce97154b Add unaltered copies of base and rudder themes to make responsive
3: 565e91062 = 3: 565e91062 rudder-responsive imports base-responsive rather than base
4: c151cf258 = 4: c151cf258 Make boxcontainer padding rules less demanding
5: 45e22b27c = 5: 45e22b27c Make RT at a glance two-column layout responsive
6: 66a41a296 = 6: 66a41a296 Improve whitespace around content for rudder-responsive
7: f0df65c03 = 7: f0df65c03 Generalize the two-column layout markup
8: 4a2814fdb = 8: 4a2814fdb Add a grid system
9: b7008bcd8 = 9: b7008bcd8 Make ticket display ShowSummary responsive
10: 2a14260d4 = 10: 2a14260d4 Make search field really narrow on narrow screens
11: 050d2b466 = 11: 050d2b466 Make the "new ticket in" and queue selector responsive
12: 7293efce0 = 12: 7293efce0 Narrow gap between new ticket and search fields on narrow screens
13: 26d3640d3 = 13: 26d3640d3 Display more of the title when the page is narrow
14: 743fca5fe = 14: 743fca5fe On narrow screens pop up a modal for selecting ticket queue
15: fc435d351 = 15: fc435d351 Hide "RT for example.com" on narrow screens
16: c12f7a2fd = 16: c12f7a2fd Eliminate history display's margin-left on narrow screens
17: 031767c67 = 17: 031767c67 On very narrow screens, zero out body padding
18: a70a12eb8 = 18: a70a12eb8 Get rid of horizontal padding on ticket history on narrow screens
19: ed77add0f = 19: ed77add0f Collapse padding at a wider (700px) viewport
20: bf6072713 = 20: bf6072713 Prevent reminders from breaking layout with its long text field
21: 3bf0b2783 = 21: 3bf0b2783 Convert Links table to have .fields/.field using table CSS
22: ef390831d = 22: ef390831d Improve styling of links for small screens
23: 9e0e238dc = 23: 9e0e238dc Don't wrap labels
24: abde98f8c = 24: abde98f8c Limit the breakdown of fields tables to just "wide" ones
25: a036b7218 = 25: a036b7218 Convert basics, dates, and people groupings away from tables
26: 18410558f = 26: 18410558f Add margin-left to <li>s within a wide fields table that breaks
27: abe679392 = 27: abe679392 Make padding on field names more consistent
28: 4535278a7 = 28: 4535278a7 Convert new reminder form from table to fields
29: 902013336 = 29: 902013336 Improve rendering of ticket update page
30: b83145a17 = 30: b83145a17 Add messagedetails to jumbo page titlebox
31: b30e4e3be = 31: b30e4e3be Improve display of reminders table and form
32: a3debdb88 = 32: a3debdb88 Avoid breaking layout with new reminder subject
33: a4ec31340 = 33: a4ec31340 Remove minimum height from titleboxes
34: 9e2e9f847 = 34: 9e2e9f847 Restore original titlebox padding rule but only for fields
35: f048c2714 = 35: f048c2714 Remove spurious <br> tag
36: 14bd5afdb = 36: 14bd5afdb Switch ticket update from tables to fields
37: b6076f108 = 37: b6076f108 Linearize ticket update form on narrow widths
38: 9847f9464 = 38: 9847f9464 Make update form take up 100% of the titlebox
39: 3f12ac4ab = 39: 3f12ac4ab Fix reply cc/bcc/subject fields to be 100% width
40: 7d903afc9 = 40: 7d903afc9 Rename .crypto to .empty to better explain what it's for
41: 0b1e7df31 = 41: 0b1e7df31 Make ticket create responsive
42: 21b722a26 = 42: 21b722a26 First pass at responsive for SelfService/Create
43: a5c7652c3 = 43: a5c7652c3 First pass at responsive for SelfService/Update
44: 8b58c4a15 = 44: 8b58c4a15 Remove AsTable from Edit CFs
45: 921d72c94 = 45: 921d72c94 Remove these pre-responsive CF edit styles
46: f5bcb7577 = 46: f5bcb7577 Wrap selfservice update form in a titlebox
47: 94e44ea62 = 47: 94e44ea62 Wrap selfservice create form in a titlebox
48: efe3f52d3 = 48: efe3f52d3 Convert selfservice display to responsive
49: fc80f17b7 = 49: fc80f17b7 Switch ShowCustomFields from table to fields
50: d26da2aa1 = 50: d26da2aa1 Fix transaction actions overlapping description
51: 726ff3ed2 = 51: 726ff3ed2 Switch QuickCreate from table to fields
52: 1dac409ae = 52: 1dac409ae Improve whitespace around fields
53: f99594d6b = 53: f99594d6b Improve padding and spacing on forms
54: 9b94580d3 = 54: 9b94580d3 Have searches use the full width of the viewport
55: df8c440d3 = 55: df8c440d3 Make login box more responsive
56: 6c19bf649 = 56: 6c19bf649 Add missing type="text" for login username input
57: ff38918b6 = 57: ff38918b6 Improve form rendering for Mobile Safari
58: bc548a5bb = 58: bc548a5bb Separate existing reminders from create form with hr only if there are reminders
59: 3d16535fd = 59: 3d16535fd Remove unnecessary margin-top on collection tables
60: a6e560500 = 60: a6e560500 Fix save button on ticket reminders to not use inline style
61: 33e559e98 = 61: 33e559e98 Fix error result background color for rudder
62: 6366d835d = 62: 6366d835d Make QueueList take up the full width
63: 753b2e278 = 63: 753b2e278 Give rudder the responsive viewport meta tag
64: 96258f3a2 = 64: 96258f3a2 Turn off autocapitalize on usernames
65: b738946b7 = 65: b738946b7 Don't let users select the "drop files here" dropzone text
66: ed9896623 = 66: ed9896623 Improve error transaction colors
67: fc2c7dd24 = 67: fc2c7dd24 Replace ShowAttachments's <font size="-2"> with CSS
68: 0ed134c2a = 68: 0ed134c2a Word-break very (perhaps maliciously) long attachment names
69: 329257c04 = 69: 329257c04 Limit the width of quickcreate since it looks silly when very very wide
70: 7e8fc73fa = 70: 7e8fc73fa Use full width for MyReminders table
71: 5acf57a6e = 71: 5acf57a6e Fix Modify Basics to be div.fields rather than table
72: 13b9aa7be = 72: 13b9aa7be Add missing type="text" to more input fields
73: 37a3c8190 = 73: 37a3c8190 Avoid menulist-button styling for multi-row select boxes
74: 76ebbf037 = 74: 76ebbf037 Middle valign fields
75: abd46fe43 = 75: abd46fe43 Convert EditPeople from nested tables to responsive
76: 6b1ed3291 = 76: 6b1ed3291 Load the correct version of msie.css
77: 55f62d910 = 77: 55f62d910 Add a BeforeNav stylesheet plugin
78: 713ae954b = 78: 713ae954b Make menus overflow into a "More" item on narrow viewports
79: 0817597f0 = 79: 0817597f0 Remove hyperlink behavior from top-level More menu items
80: 51ff61b95 = 80: 51ff61b95 Add type attribute to many input fields that were missing it
81: 9920a2bae = 81: 9920a2bae Fix css rule for one-time cc etc becoming email fields
82: 639ec0a0a = 82: 639ec0a0a Switch new ticket create popup to a list of links rather than a select
83: 263260d84 = 83: 263260d84 Fix a regression on legacy themes with CF edit panels
84: e7a24762e = 84: e7a24762e Override 400px width of jquery modals
85: d05db9319 = 85: d05db9319 Fix quick create on narrow screens
86: 1ce3e7535 = 86: 1ce3e7535 Fix width regression with quickcreate requestor field
87: 0bdd6b928 = 87: 0bdd6b928 Switch AddLinks from tables to fields
88: de71b019f = 88: de71b019f Improve rendering of date editing form
89: 7e88d621b = 89: 7e88d621b Improve padding to be more consistent
90: 15dd4d5e1 = 90: 15dd4d5e1 Make modify links use fluid two-column layout
91: 4bb74ee24 = 91: 4bb74ee24 Improve edit links to use fields instead of a table
92: 71adf4d59 = 92: 71adf4d59 Convert merge from table to fields
93: 8bed2a517 = 93: 8bed2a517 Use the same nomenclature "Message" not "Content" for jumbo
94: 821af7169 = 94: 821af7169 Switch Jumbo reply panel from table to fields
95: 451b94ebf = 95: 451b94ebf Jumbo: Wrap both basic fields and custom fields in a single fields table
96: 8e0edb097 = 96: 8e0edb097 Make message form on Jumbo more consistent
97: 3410d1f86 = 97: 3410d1f86 Make simple search form more responsive
98: ac878afd0 = 98: ac878afd0 Fix rudder-responsive getting bottom border radius
99: ee6fd153c = 99: ee6fd153c Remove margin-right from titleboxes in rudder-responsive
100: 19e92fb58 = 100: 19e92fb58 Improve design of more about requestors panel
101: 0795549da = 101: 0795549da Make user prefs page responsive to small screens
102: 3142b6f1e = 102: 3142b6f1e Remove 20em width from ticket subject on basics
103: d2c34c901 = 103: d2c34c901 Wrap forward message in a titlebox
104: e93736f6e = 104: e93736f6e Switch forward from table to fields
105: 865306bb5 = 105: 865306bb5 Fix "more about requestors" overlap
106: a91ad6b41 = 106: a91ad6b41 Update tests for the responsive HTML change
107: 309321394 = 107: 309321394 Fix Nav tweaking for installer mode
108: 5d80cac56 = 108: 5d80cac56 Initial elevator theme, copied from rudder-responsive
109: 9e2710667 = 109: 9e2710667 Add popper.js 1.14.6 dependency
110: d5361e4f8 = 110: d5361e4f8 Add bootstrap 4.2.1 dependency
111: ce6db31de = 111: ce6db31de Add missing "field" css class for Started field
112: 18b4c17ed = 112: 18b4c17ed Get rid of strikethrough in menu
113: 2c1913cea = 113: 2c1913cea Fix h1 position to make it vertically centered
114: 16a290165 = 114: 16a290165 Fix results position to make it vertically centered
115: fa1eddb07 = 115: fa1eddb07 Drop the incomplete rudder-responsive theme
116: 30c74df65 = 116: 30c74df65 Update copyright to 2019 for new added theme related files
117: 8202a7ed6 = 117: 8202a7ed6 Initial elevator-dark theme
118: 6e8c418d2 = 118: 6e8c418d2 Add bootstrap-select 1.13.7 dependency
119: 65a2b8e72 = 119: 65a2b8e72 Switch to bootstrap styled table
120: d3c438a8c = 120: d3c438a8c Switch to bootstrap card for titleboxes
121: 19983ce0c = 121: 19983ce0c Add %ThemeJSFiles config to serve different js for different themes
122: c20ba1ee1 = 122: c20ba1ee1 Migrate search builder for elevator themes
123: c381b52d6 = 123: c381b52d6 Migrate homepage to elevator themes
124: 2b95d7c55 = 124: 2b95d7c55 Add bootstrap-combobox 1.2.0 dependency
125: 16785047a = 125: 16785047a Migrate cf edit components to elevator themes
126: 3434d9955 = 126: 3434d9955 Migrate ticket modify pages to elevator themes
127: 3287cf808 = 127: 3287cf808 Migrate Reports pages to elevator themes
128: 5cca4857d = 128: 5cca4857d Migrate Admin/Scrips/index to elevator themes
129: d38e146cd = 129: d38e146cd Migrate Admin/Scrips/Create to elevator themes
130: ef2c1e2f4 = 130: ef2c1e2f4 Migrate Admin/Scrips/Modify to elevator themes
131: 71c8971a2 = 131: 71c8971a2 Migrate Admin/Scrips/Objects to elevator themes
132: b487bd5e5 = 132: b487bd5e5 Migrate Admin/Actions/Display to elevator themes
133: f1112cfd9 = 133: f1112cfd9 Update asset CSS and JS files for elevator theme
134: 96287645d = 134: 96287645d Update asset display components for elevator theme
135: 9317af1b2 = 135: 9317af1b2 Update asset create/modify components for elevator theme
136: edb9d71e1 = 136: edb9d71e1 Update asset search components for elevator theme
137: 1983b0460 = 137: 1983b0460 Migrate Admin/Actions/Create to elevator themes
138: 93ba4a292 = 138: 93ba4a292 Migrate Admin/Actions/Modify to elevator themes
139: be2c9fbaa = 139: be2c9fbaa Migrate Admin/Conditions/Create to elevator themes
140: 440891534 = 140: 440891534 Migrate Admin/Conditions/Modify to elevator themes
141: c9d4607cb = 141: c9d4607cb Migrate Admin/Conditions/Display to elevator themes
142: b51534875 ! 142: 7a038a2dd Migrate ticket pages to elevator theme
@@ -1,6 +1,142 @@
Author: Craig Kaiser <craig at bestpractical.com>
Migrate ticket pages to elevator theme
+
+diff --git a/share/html/Helpers/PreviewScrips b/share/html/Helpers/PreviewScrips
+--- a/share/html/Helpers/PreviewScrips
++++ b/share/html/Helpers/PreviewScrips
+@@
+ % my $action = $s->ActionObj->Action;
+ % scalar(map { $action->$_ } qw(To Cc Bcc))
+ % } @scrips ) {
+-<input type="checkbox" class="checkbox" id="TxnSendMailToAll" name="TxnSendMailToAll" <% $ARGS{TxnSendMailToAll} ? 'checked="checked"' : '' %> value="1">
+-<label for="TxnSendMailToAll"><b><% loc('All recipients') %></b></label><br />
++<div class="custom-control custom-checkbox">
++ <input type="checkbox" id="TxnSendMailToAll" name="TxnSendMailToAll" <% $ARGS{TxnSendMailToAll} ? 'checked="checked"' : '' %> value="1" class="custom-control-input">
++ <label class="custom-control-label" for="TxnSendMailToAll"><b><% loc('All recipients') %></b></label><br />
++</div>
+ % }
+ % for my $scrip (@scrips) {
+ <b><% $scrip->Description || loc('Scrip #[_1]',$scrip->id) %></b><br />
+@@
+ % my $action = $scrip->ActionObj->Action;
+ % my @addresses = $action->$type();
+ % next unless @addresses;
+- <ul>
++ <ul class="list-group-compact">
+ % for my $addr (@addresses) {
+- <li>
++ <li class="list-group-item">
+ % my $checked = $submitted{$addr->address} ? not $squelched{$addr->address} : $squelched_config;
+ % $m->callback(CallbackName => 'BeforeAddress', Ticket => $TicketObj, Address => $addr, Type => $type, Checked => \$checked);
+ % $recips{$addr->address}++;
+- <b><%loc($type)%></b>:
++ <div class="form-row">
++ <div class="col-md-auto">
++ <b><%loc($type)%></b>:
++ </div>
++ <div class="col-md-auto">
+ % my $show_checkbox = 1;
+ % if ( grep {$_ eq $addr->address} @{$action->{NoSquelch}{$type}} ) {
+ % $show_checkbox = 0;
+ % }
+-
++ <div class="custom-control custom-checkbox">
+ % if ( $show_checkbox ) {
+- <input type="checkbox" class="checkbox" name="TxnSendMailTo" <% $checked ? 'checked="checked"' : '' |n%> value="<%$addr->address%>" id="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>" />
++ <input type="checkbox" class="custom-control-input" name="TxnSendMailTo" <% $checked ? 'checked="checked"' : '' |n%> value="<%$addr->address%>" id="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>" />
+ % }
+- <label for="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>"><& /Elements/ShowUser, Address => $addr &></label>
++ <label <% $show_checkbox ? 'class="custom-control-label"' : '' |n%> for="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>"><& /Elements/ShowUser, Address => $addr &></label>
+ % $m->callback(CallbackName => 'AfterAddress', Ticket => $TicketObj, Address => $addr, Type => $type);
+ % unless ( $show_checkbox ) {
+ % if ( $type eq 'Cc' ) {
+@@
+ (<&|/l&>explicit one-time Bcc</&>)
+ % }
+ % }
++ </div>
++ </div>
++ </div>
+ </li>
+ % }
+ </ul>
+ % }
+ % if (RT->Config->Get('PreviewScripMessages')) {
+- <textarea cols="80" rows="5"><% Encode::decode( "UTF-8", $scrip->ActionObj->Action->TemplateObj->MIMEObj->as_string )%></textarea>
++ <textarea class="form-control" cols="80" rows="5"><% Encode::decode( "UTF-8", $scrip->ActionObj->Action->TemplateObj->MIMEObj->as_string )%></textarea>
+ % }
+ <br />
+ % }
+
+diff --git a/share/html/Helpers/ShowSimplifiedRecipients b/share/html/Helpers/ShowSimplifiedRecipients
+--- a/share/html/Helpers/ShowSimplifiedRecipients
++++ b/share/html/Helpers/ShowSimplifiedRecipients
+@@
+ my %submitted;
+ $submitted{$_} = 1 for split /,/, $ARGS{TxnRecipients};
+ </%init>
+-<table>
+ % if ( scalar(map { keys %{$headers{$_}} } qw(To Cc Bcc)) ) {
+-<tr>
+-<td> </td>
+-<td>
+-<input type="checkbox" class="checkbox" id="TxnSendMailToAll-Simplified" name="TxnSendMailToAll" value="1">
+-<label for="TxnSendMailToAll-Simplified"><b><% loc('All recipients') %></b></label>
+-</td>
+-</tr>
++
++<div class="custom-control custom-checkbox">
++ <input class="custom-control-input" type="checkbox" id="TxnSendMailToAll-Simplified" name="TxnSendMailToAll" value="1">
++ <label class="custom-control-label" for="TxnSendMailToAll-Simplified"><b><% loc('All recipients') %></b></label>
++</div>
+ % }
+ % for my $type (qw(To Cc Bcc)) {
+ % next unless keys %{$headers{$type}} or keys %{$no_squelch{$type}};
+-<tr>
+-<td valign="top"><% $type %>:</td>
+-<td valign="top">
++<ul class="list-group-compact">
++ <li class="list-group-item">
++ <div class="form-row">
++ <div class="col-md-auto">
++ <% $type %>:
++ </div>
++ <div class="col-md-auto">
+ % for my $addr (sort {$a->address cmp $b->address} values %{$headers{$type}}) {
+ % my $checked = $submitted{$addr->address} ? not $squelched{$addr->address} : $squelched_config;
+ % $m->callback(CallbackName => 'BeforeAddress', Ticket => $TicketObj, Address => $addr, Type => $type, Checked => \$checked);
+ % $recips{$addr->address}++;
+-<input type="checkbox" class="checkbox" name="TxnSendMailTo" <% $checked ? 'checked="checked"' : '' |n%> value="<%$addr->address%>" id="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>" />
+-<label for="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>"><& /Elements/ShowUser, Address => $addr &></label>
++ <div class="custom-control custom-checkbox">
++ <input type="checkbox" name="TxnSendMailTo" <% $checked ? 'checked="checked"' : '' |n%> value="<%$addr->address%>" id="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>" class="custom-control-input" />
++ <label class="custom-control-label" for="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>"><& /Elements/ShowUser, Address => $addr &></label>
++ </div>
+ % $m->callback(CallbackName => 'AfterAddress', Ticket => $TicketObj, Address => $addr, Type => $type);
+-<br />
+ % }
+ % for my $addr (sort {$a->address cmp $b->address} values %{$no_squelch{$type}}) {
++<div class="col-md-auto">
+ <label><& /Elements/ShowUser, Address => $addr &></label>
+ % if ( $type eq 'Cc' ) {
+ (<&|/l&>explicit one-time Cc</&>)
+ % } else {
+ (<&|/l&>explicit one-time Bcc</&>)
+ % }
+-<br />
++</div>
+ % }
+-</td></tr>
++ </div>
++ </li>
++ </ul>
+ % }
+ % $m->callback( CallbackName => 'AfterRecipients', TicketObj => $TicketObj );
+-</table>
+ <p>
+ <&|/l, RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$TicketObj->Id,
+ &>Uncheck boxes to disable notifications to the listed recipients <b>for this transaction only</b>; persistent squelching is managed on the <a href="[_1]">People page</a>.</&>
diff --git a/share/html/Ticket/Create.html b/share/html/Ticket/Create.html
--- a/share/html/Ticket/Create.html
@@ -23,9 +159,12 @@
</script>
<div class="hidden old-attach">
- <input name="Attach" type="file" /><input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" />
+- <input type="hidden" class="hidden" name="UpdateAttach" value="1" />
+ <div class="custom-file">
-+ <input class="custom-file-input" name="Attach" type="file" /><input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" />
- <input type="hidden" class="hidden" name="UpdateAttach" value="1" />
++ <input type="file" id="AddMoreAttach" name="AddMoreAttach" class="custom-file-input" />
++ <label class="custom-file-label" for="AddMoreAttach">
++ <&|/l&>Add More Files</&>
++ </label>
+ </div>
</div>
</span>
@@ -71,25 +210,16 @@
% $i++;
% }
% else {
- % $editable = 1 if !$editable && $reminder->CurrentUserHasRight( 'ModifyTicket' );
- % if ($Edit) {
--<& SELF:EditEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &>
-+ <& SELF:EditEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &>
- % } else {
--<& SELF:ShowEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &>
-+ <& SELF:ShowEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &>
+@@
+ <& SELF:ShowEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &>
% }
% }
+</div>
% }
-</table>
-+
% if ( $editable ) {
--<i><&|/l&>(Check box to complete)</&></i>
-+ <i><&|/l&>(Check box to complete)</&></i>
- % }
- <hr>
- % } else {
+ <i><&|/l&>(Check box to complete)</&></i>
+ % }
@@
% }
@@ -115,13 +245,6 @@
<div class="field">
<span class="label"><&|/l&>Owner</&>:</span>
@@
- </div>
- </div>
- </%method>
-+
- <%method EditEntry>
- <%args>
- $Reminder
$Ticket
$Index
</%args>
@@ -166,7 +289,7 @@
+ <div class="label col-md-3">
+ <&|/l&>Subject</&>:
+ </div>
-+ <div class="entry col-md-9">
++ <div class="value col-md-9">
+ <input type="text" class="reminder-subject form-control" name="Reminder-Subject-<% $Reminder->id %>" value="<% $Reminder->Subject %>"
+% unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) {
+ readonly="readonly"
@@ -178,13 +301,13 @@
+ <div class="label col-md-3">
+ <&|/l&>Owner</&>:
+ </div>
-+ <div class="entry col-md-9">
++ <div class="value col-md-9">
+ <& /Elements/SelectOwner, Name => 'Reminder-Owner-'.$Reminder->id, QueueObj => $Ticket->QueueObj, Default => $Reminder->Owner, DefaultValue => 0 &>
+ </div>
+ <div class="label col-md-3">
+ <&|/l&>Due</&>:
+ </div>
-+ <div class="entry col-md-9">
++ <div class="value col-md-9">
% if ( $Reminder->CurrentUserHasRight('ModifyTicket') ) {
-<& /Elements/SelectDate, Name => 'Reminder-Due-'.$Reminder->id &>
-% }
@@ -192,12 +315,14 @@
-</td>
-</tr>
+ <div class="form-row">
-+ <& /Elements/SelectDate, Name => 'Reminder-Due-'.$Reminder->id &>
++ <div class="col-auto">
++ <& /Elements/SelectDate, Name => 'Reminder-Due-'.$Reminder->id &>
++ </div>
++ <div class="col-auto">
++ <span class="current-value form-control">(<% $Reminder->DueObj->AsString %>)</span>
++ </div>
+ </div>
+% }
-+ <div class="form-row">
-+ (<% $Reminder->DueObj->AsString %>)
-+ </div>
+ </div>
+ </div>
+ </div>
@@ -272,262 +397,63 @@
<span class="filename"><%$key%></span>
-<ul <% $Selectable ? 'class="selectable"' : '' |n %> >
-+<ul class="list-group" <% $Selectable ? 'class="selectable"' : '' |n %> >
++<ul class="list-group-compact" <% $Selectable ? 'class="selectable"' : '' |n %> >
% foreach my $rev (@{$documents{$key}}) {
% if ($rev->ContentLength) {
-<li>
+<li class="list-group-item">
++ <div class="custom-control custom-checkbox">
% if ($Selectable) {
- <label>
+- <label>
- <input type="checkbox" class="checkbox" name="AttachExisting" value="<% $rev->Id %>" \
- <% $is_checked{$rev->Id} ? 'checked' : '' %> />
-+ <div class="custom-control custom-checkbox">
-+ <input type="checkbox" class="custom-control-input" name="AttachExisting" value="<% $rev->Id %>" \
++ <input type="checkbox" class="custom-control-input" id="AttachExisting-<% $rev->Id %>" name="AttachExisting" value="<% $rev->Id %>" \
+ <% $is_checked{$rev->Id} ? 'checked' : '' %>
+ />
-+ <div class="custom-control-label"></div>
-+ </div>
- % }
-
+ % }
+
++<label <% $Selectable ? 'class="custom-control-label"' : '' |n%> for="AttachExisting-<% $rev->Id %>">
<span class="revision">
+ % if (my $url = RT->System->ExternalStorageURLFor($rev)) {
+ <a href="<%$url%>">
+@@
+ <% $desc |n%>
+ </a>
+ </span>
+-
+-% if ($Selectable) {
+ </label>
+-% }
+-
++ </div>
+ </li>
+ % }
+ % }
diff --git a/share/html/Ticket/Elements/ShowBasics b/share/html/Ticket/Elements/ShowBasics
--- a/share/html/Ticket/Elements/ShowBasics
+++ b/share/html/Ticket/Elements/ShowBasics
@@
- % $m->callback( %ARGS, CallbackName => 'AfterTimeEstimated', TicketObj => $Ticket );
- % if ($Ticket->TimeWorked) {
- <div class="time worked sum field">
-- <span class="label"><&|/l&>Worked</&>:</span>
-- <span class="value"><& ShowTime, minutes => $Ticket->TimeWorked &></span>
-+ <span class="label col-md-3">
-+ <&|/l&>Worked</&>:
-+ </span>
-+ <span class="value col-md-9">
-+ <& ShowTime, minutes => $Ticket->TimeWorked &>
-+ </span>
- </div>
- % }
- % if ( keys %$time_worked ) {
<div class="time worked by-user field">
-- <span class="label"><&|/l&>Users</&>:</span>
-- <span>
+ <span class="label"><&|/l&>Users</&>:</span>
+ <span>
- <table>
-+ <span class="label col-md-3">
-+ <&|/l&>Users</&>:
-+ </span>
% for my $user ( keys %$time_worked ) {
- <tr>
- <td class="value"><% $user %>:</td>
- <td class="value"><& /Ticket/Elements/ShowTime, minutes => $time_worked->{$user} &></td>
- </tr>
-+ <div class="form-row">
-+ <span class="value col-md-9">
-+ <% $user %>: <& /Ticket/Elements/ShowTime, minutes => $time_worked->{$user} &>
-+ </span>
-+ </div>
++ <div class="form-row">
++ <div class="value"><% $user %>:</div>
++ <div class="value"><& /Ticket/Elements/ShowTime, minutes => $time_worked->{$user} &></div>
++ </div>
% }
- </table>
-- </span>
++ </div>
+ </span>
</div>
% }
- % $m->callback( %ARGS, CallbackName => 'AfterTimeWorked', TicketObj => $Ticket );
-
-diff --git a/share/html/Ticket/Elements/ShowRequestor b/share/html/Ticket/Elements/ShowRequestor
---- a/share/html/Ticket/Elements/ShowRequestor
-+++ b/share/html/Ticket/Elements/ShowRequestor
-@@
- <div id="requestor-accordion" class="user-accordion">
-
- % while ( my $requestor = $people->Next ) {
--<h3><a href="#"><& /Elements/ShowUser, User => $requestor, Link => 0 &></a>
-- <a class="user-summary" href="<%RT->Config->Get('WebPath')%>/User/Summary.html?id=<%$requestor->Id%>">User Summary</a></h3>
-+ <div class="form-row">
-+ <h3><a href="#"><& /Elements/ShowUser, User => $requestor, Link => 0 &></a>
-+ <a class="user-summar" href="<%RT->Config->Get('WebPath')%>/User/Summary.html?id=<%$requestor->Id%>">User Summary</a></h3>
-+ </div>
- <div class="details">
-
- %# Additional information about this user. Empty by default.
-@@
- <& ShowRequestorExtraInfo, Requestor => $requestor &>
-
- % if ( $ShowComments ) {
--<div class="comments-about-user">
-- <span class="label"><&|/l&>Comments about this user</&>:</span>
-- <span class="value"><% ($requestor->Comments || loc("No comment entered about this user")) %></span>
--</div>
-+ <div class="form-row">
-+ <div class="comments-about-user">
-+ <span class="label"><&|/l&>Comments about this user</&>:</span>
-+ <span class="value"><% ($requestor->Comments || loc("No comment entered about this user")) %></span>
-+ </div>
-+ </div>
- % }
-
- % $m->callback( requestor => $requestor, %ARGS, CallbackName => 'AfterComments' );
-
- % if ( $ShowTickets ) {
--<div class="more-about-requestor-tickets ui-tabs" id="more-about-requestor-tickets-<%$requestor->Id%>">
-- <ul>
-+ <div class="more-about-requestor-tickets ui-tabs" id="more-about-requestor-tickets-<%$requestor->Id%>">
-+ <ul class="list-group">
- % my $index = 1;
- % for my $status ( @$status_order ) {
-- <li>
-+ <li class="list-group-item">
- % if ( $status eq $DefaultTicketsTab ) {
-- <a href="#requestor-<%$requestor->Id%>-ticket-tab-default">\
-+ <a href="#requestor-<%$requestor->Id%>-ticket-tab-default">\
- % } else {
- % my $url = RT->Config->Get('WebPath').'/Helpers/Toggle/ShowRequestor?'.
- % $m->comp('/Elements/QueryString', Requestor => $requestor->Id , Status => $status);
-- <a href="<% $url | n %>" title="requestor-<%$requestor->Id%>-ticket-tab-<% $index++ %>">\
-+ <a href="<% $url | n %>" title="requestor-<%$requestor->Id%>-ticket-tab-<% $index++ %>">\
- % }
- <% $status_link_text->{$status} %></a>
-- </li>
-+ </li>
- % }
-- </ul>
-+ </ul>
- % $index = 1;
- % for my $status (@$status_order) {
- % if ( $status eq $DefaultTicketsTab ) {
-- <div id="requestor-<%$requestor->Id%>-ticket-tab-default">
-- <& $TicketTemplate, Requestor => $requestor &>
-+ <div id="requestor-<%$requestor->Id%>-ticket-tab-default">
-+ <& $TicketTemplate, Requestor => $requestor &>
- % } else {
-- <div id="requestor-<%$requestor->Id%>-ticket-tab-<% $index++ %>" class="hidden">
-- <span class="label"><&|/l&>Loading...</&></span>
-+ <div id="requestor-<%$requestor->Id%>-ticket-tab-<% $index++ %>" class="hidden">
-+ <span class="label"><&|/l&>Loading...</&></span>
-+ </div>
- % }
-- </div>
- % }
--</div>
-+ </div>
- % }
-
- % my $grouplimit = RT->Config->Get('MoreAboutRequestorGroupsLimit');
- % if ( $ShowGroups and defined $grouplimit ) {
--<div class="more-about-user-groups">
-- <span class="label">
-- <&|/l&>Groups this user belongs to</&>
-+ <div class="more-about-user-groups">
-+ <span class="label">
-+ <&|/l&>Groups this user belongs to</&>
-
- % if ( $session{CurrentUser}->HasRight( Right => 'AdminUsers', Object => $RT::System ) &&
- % $session{CurrentUser}->HasRight( Right => 'ShowConfigTab', Object =>$RT::System ) ) {
-- [<a href=<% RT->Config->Get('WebPath') . '/Admin/Users/Memberships.html?id=' . $requestor->id %> ><&|/l&>Edit</&></a>]
-+ [<a href=<% RT->Config->Get('WebPath') . '/Admin/Users/Memberships.html?id=' . $requestor->id %> ><&|/l&>Edit</&></a>]
- % }
-- </span>
-- <span class="value"><& /Elements/ShowMemberships, UserObj => $requestor, Limit => $grouplimit &></span>
--</div>
-+ </span>
-+ <span class="value"><& /Elements/ShowMemberships, UserObj => $requestor, Limit => $grouplimit &></span>
-+ </div>
- % }
-
- %# end of individual requestor details <div>
-- </div>
-+ </div>
- % }
-+</div>
- %# end of requestors loop
-
- % $m->callback( %ARGS, CallbackName => 'AfterRequestors' );
-
--</div>
- </&>
- <%INIT>
- my $show_privileged = RT->Config->Get('ShowMoreAboutPrivilegedUsers');
-
-diff --git a/share/html/Ticket/Elements/ShowSummary b/share/html/Ticket/Elements/ShowSummary
---- a/share/html/Ticket/Elements/ShowSummary
-+++ b/share/html/Ticket/Elements/ShowSummary
-@@
- %# those contributions and any derivatives thereof.
- %#
- %# END BPS TAGGED BLOCK }}}
--<div class="row ticket-summary">
-- <div class="boxcontainer col-md-6">
-+<div class="form-row ticket-summary">
-+ <div class="col-md-6">
- % $m->callback( %ARGS, CallbackName => 'LeftColumnTop' );
- <&| /Widgets/TitleBox, title => loc('The Basics'),
- (($can_modify || $can_modify_cf) ? (title_href => RT->Config->Get('WebPath')."/Ticket/Modify.html?id=".$Ticket->Id) : ()),
- class => 'ticket-info-basics',
-- &><& /Ticket/Elements/ShowBasics, Ticket => $Ticket &></&>
-+ &><& /Ticket/Elements/ShowBasics, Ticket => $Ticket &>
-+ </&>
- % $m->callback( %ARGS, CallbackName => 'AfterBasics' );
- <& /Elements/ShowCustomFieldCustomGroupings,
-- Object => $Ticket,
-- title_href => ($can_modify || $can_modify_cf) ? RT->Config->Get('WebPath')."/Ticket/Modify.html" : "",
-- &>
--
-+ Object => $Ticket,
-+ title_href => ($can_modify || $can_modify_cf) ? RT->Config->Get('WebPath')."/Ticket/Modify.html" : "",
-+ &>
- <&| /Widgets/TitleBox, title => loc('People'),
-- (($can_modify || $can_modify_owner || $can_modify_people) ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$Ticket->Id) : ()),
-- class => 'ticket-info-people',
-+ (($can_modify || $can_modify_owner || $can_modify_people) ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$Ticket->Id) : ()),
-+ class => 'ticket-info-people',
- &><& /Ticket/Elements/ShowPeople, Ticket => $Ticket &></&>
- % $m->callback( %ARGS, CallbackName => 'AfterPeople' );
- <& /Ticket/Elements/ShowAttachments, Ticket => $Ticket, Attachments => $Attachments, Count => RT->Config->Get('AttachmentListCount') &>
-@@
- <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &>
- % $m->callback( %ARGS, CallbackName => 'LeftColumn' );
- </div>
-- <div class="boxcontainer col-md-6">
-+ <div class="col-md-6">
- % $m->callback( %ARGS, CallbackName => 'RightColumnTop' );
- % if ( RT->Config->Get('EnableReminders') ) {
- <&|/Widgets/TitleBox, title => loc("Reminders"),
-- title_href => RT->Config->Get('WebPath')."/Ticket/Reminders.html?id=".$Ticket->Id,
-- class => 'ticket-info-reminders fullwidth',
-+ title_href => RT->Config->Get('WebPath')."/Ticket/Reminders.html?id=".$Ticket->Id,
-+ class => 'ticket-info-reminders fullwidth',
- &>
-- <form action="<%RT->Config->Get('WebPath')%>/Ticket/Display.html" name="UpdateReminders" id="UpdateReminders" method="post">
-- <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 0 &>
-- </form>
-+ <form action="<%RT->Config->Get('WebPath')%>/Ticket/Display.html" name="UpdateReminders" id="UpdateReminders" method="post">
-+ <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 0 &>
-+ </form>
- </&>
- % }
- % $m->callback( %ARGS, CallbackName => 'AfterReminders' );
- <&| /Widgets/TitleBox, title => loc("Dates"),
-- ($can_modify ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyDates.html?id=".$Ticket->Id) : ()),
-- class => 'ticket-info-dates',
-+ ($can_modify ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyDates.html?id=".$Ticket->Id) : ()),
-+ class => 'ticket-info-dates',
- &><& /Ticket/Elements/ShowDates, Ticket => $Ticket &></&>
- % $m->callback( %ARGS, CallbackName => 'AfterDates' );
- % my (@extra);
- % push @extra, titleright_raw => '<a href="'. RT->Config->Get('WebPath'). '/Ticket/Graphs/index.html?id='.$Ticket->id.'">'.loc('Graph').'</a>' unless RT->Config->Get('DisableGraphViz');
--<& /Ticket/Elements/ShowAssets, Ticket => $Ticket &>
-+ <& /Ticket/Elements/ShowAssets, Ticket => $Ticket &>
- % $m->callback( %ARGS, CallbackName => 'LinksExtra', extra => \@extra );
- <&| /Widgets/TitleBox, title => loc('Links'),
-- ($can_modify ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyLinks.html?id=".$Ticket->Id) : ()),
-- class => 'ticket-info-links',
-- @extra,
-+ ($can_modify ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyLinks.html?id=".$Ticket->Id) : ()),
-+ class => 'ticket-info-links',
-+ @extra,
- &><& /Elements/ShowLinks, Object => $Ticket &></&>
- % $m->callback( %ARGS, CallbackName => 'RightColumn' );
- </div>
diff --git a/share/html/Ticket/Elements/ShowUpdateStatus b/share/html/Ticket/Elements/ShowUpdateStatus
--- a/share/html/Ticket/Elements/ShowUpdateStatus
@@ -554,70 +480,6 @@
<%ARGS>
$Ticket
-diff --git a/share/html/Ticket/Elements/UpdateCc b/share/html/Ticket/Elements/UpdateCc
---- a/share/html/Ticket/Elements/UpdateCc
-+++ b/share/html/Ticket/Elements/UpdateCc
-@@
- <div class="OneTimeCcs hidden">
- % }
- <i class="label">(<&|/l&>check to add</&>)</i>
--<input type="checkbox" class="checkbox" id="AllSuggestedCc" name="AllSuggestedCc" value="1" onclick="setCheckbox(this, /^UpdateCc-/, null, true)">
--<label for="AllSuggestedCc"><% loc('All recipients') %></label>
-+<div class="custom-control custom-checkbox">
-+ <input type="checkbox" class="custom-control-input" id="AllSuggestedCc" name="AllSuggestedCc" value="1" onclick="setCheckbox(this, /^UpdateCc-/, null, true)">
-+ <label class="custom-control-label" for="AllSuggestedCc"><% loc('All recipients') %></label>
-+</div>
- %}
- %foreach my $addr ( @one_time_Ccs ) {
- <span class="ticket-update-suggested-cc">
--<input
-+<div class="custom-control custom-checkbox">
-+ <input
- id="UpdateCc-<%$addr%>"
- name="UpdateCc-<%$addr%>"
-- class="onetime onetimecc"
-+ class="onetime onetimecc custom-control-input"
- type="checkbox"
- % my $clean_addr = $txn_addresses{$addr}->format;
- onClick="checkboxToInput('UpdateCc', <% "UpdateCc-$addr" |n,j%>, <%$clean_addr|n,j%> );"
- <% $ARGS{'UpdateCc-'.$addr} ? 'checked="checked"' : ''%> >
-- <label for="UpdateCc-<%$addr%>"><& /Elements/ShowUser, Address => $txn_addresses{$addr}&></label>
-+ <label class="custom-control-label" for="UpdateCc-<%$addr%>"><& /Elements/ShowUser, Address => $txn_addresses{$addr}&></label>
-+</div>
- </span>
- %}
- %if (@one_time_Ccs && $hide_cc_suggestions) {
-@@
- <div class="OneTimeCcs hidden">
- % }
- <i class="label">(<&|/l&>check to add</&>)</i>
--<input type="checkbox" class="checkbox" id="AllSuggestedBcc" name="AllSuggestedBcc" value="1" onclick="setCheckbox(this, /^UpdateBcc-/, null, true)">
--<label for="AllSuggestedBcc"><% loc('All recipients') %></label>
-+<div class="custom-control custom-checkbox">
-+ <input type="checkbox" class="custom-control-input" id="AllSuggestedBcc" name="AllSuggestedBcc" value="1" onclick="setCheckbox(this, /^UpdateBcc-/, null, true)">
-+ <label class="custom-control-label" for="AllSuggestedBcc"><% loc('All recipients') %></label>
-+</div>
- %}
- %foreach my $addr ( @one_time_Ccs ) {
- <span class="ticket-update-suggested-cc">
--<input
-+<div class="custom-control custom-checkbox">
-+ <input
- id="UpdateBcc-<%$addr%>"
- name="UpdateBcc-<%$addr%>"
-- class="onetime onetimebcc"
-+ class="onetime onetimebcc custom-control-input"
- type="checkbox"
- % my $clean_addr = $txn_addresses{$addr}->format;
- onClick="checkboxToInput('UpdateBcc', <% "UpdateBcc-$addr" |n,j%>, <%$clean_addr|n,j%> );"
- <% $ARGS{'UpdateBcc-'.$addr} ? 'checked="checked"' : ''%> >
-- <label for="UpdateBcc-<%$addr%>"><& /Elements/ShowUser, Address => $txn_addresses{$addr}&></label>
-+ <label class="custom-control-label" for="UpdateBcc-<%$addr%>"><& /Elements/ShowUser, Address => $txn_addresses{$addr}&></label>
-+</div>
- </span>
- %}
- %if (@one_time_Ccs && $hide_cc_suggestions) {
-
diff --git a/share/html/Ticket/Forward.html b/share/html/Ticket/Forward.html
--- a/share/html/Ticket/Forward.html
+++ b/share/html/Ticket/Forward.html
@@ -645,7 +507,7 @@
+ <div class="col-md-3 label">
+ <% loc('Direction') %>
+ </div>
-+ <div class="col-md-9">
++ <div class="col-md-9 value">
+ <select class="form-control selectpicker" name="Direction">
+ <option value="TB" <% ($Direction||'TB') eq 'TB'? 'selected="selected"': '' |n %>><% loc('top to bottom') %></option>
+ <option value="LR" <% ($Direction||'TB') eq 'LR'? 'selected="selected"': '' |n %>><% loc('left to right') %></option>
@@ -697,17 +559,21 @@
+ <% loc('Show as well') %>:
+ </div>
+ <div class="col-md-9">
++ <div class="form-row">
% foreach my $type ( @link_types ) {
% my $checked = '';
% $checked = 'checked="checked"' if grep $type eq $_, @ShowLinks;
-<input type="checkbox" id="ShowLinks" name="ShowLinks" value="<% $type %>" <% $checked |n %> />
-<label for="ShowLinks"><% loc($type) %></label>
-+ <div class="custom-control custom-checkbox">
-+ <input class="custom-control-input" type="checkbox" id="ShowLinks" name="ShowLinks" value="<% $type %>" <% $checked |n %> />
-+ <label class="custom-control-label" for="ShowLinks"><% loc($type) %></label>
++ <div class="col-md-auto">
++ <div class="custom-control custom-checkbox">
++ <input class="custom-control-input" type="checkbox" id="ShowLinks" name="ShowLinks" value="<% $type %>" <% $checked |n %> />
++ <label class="custom-control-label" for="ShowLinks"><% loc($type) %></label>
++ </div>
++ </div>
+ % }
+-<br />
+ </div>
- % }
--<br />
+ </div>
+ </div>
@@ -794,9 +660,11 @@
% $checked = 'checked="checked"' if grep $_ eq $prop, @Default;
-<input type="checkbox" class="checkbox" id="Level-<% $Level %>-Properties" name="Level-<% $Level %>-Properties" value="<% $prop %>" <% $checked |n %> />
-<label for="Level-<% $Level %>-Properties"><% loc($prop) %></label>
-+ <div class="custom-control custom-checkbox">
-+ <input type="checkbox" class="custom-control-input" id="Level-<% $prop %>-Properties" name="Level-<% $Level %>-Properties" value="<% $prop %>" <% $checked |n %> />
-+ <label class="custom-control-label" for="Level-<% $prop %>-Properties"><% loc($prop) %></label>
++ <div class="col-md-auto">
++ <div class="custom-control custom-checkbox">
++ <input type="checkbox" class="custom-control-input" id="Level-<% $prop %>-Properties" name="Level-<% $Level %>-Properties" value="<% $prop %>" <% $checked |n %> />
++ <label class="custom-control-label" for="Level-<% $prop %>-Properties"><% loc($prop) %></label>
++ </div>
+ </div>
% }
-</td></tr>
@@ -885,6 +753,26 @@
% $m->callback( %ARGS, CallbackName => 'AfterSubject' );
</span></div>
+
+diff --git a/share/static/css/base-responsive/ticket-form.css b/share/static/css/base-responsive/ticket-form.css
+--- a/share/static/css/base-responsive/ticket-form.css
++++ b/share/static/css/base-responsive/ticket-form.css
+@@
+ float: right;
+ }
+
+-#recipients label {
+- padding-left: 2em;
+-}
+-
+-#recipients input.checkbox {
+- position: absolute;
+- margin-left: 0.5em;
+-}
+-
+ .refreshing {
+ opacity: 0.3;
+ }
diff --git a/t/web/reminders.t b/t/web/reminders.t
--- a/t/web/reminders.t
More information about the rt-commit
mailing list