[Rt-commit] rt branch, 4.6-theme/search-pages, repushed
Craig Kaiser
craig at bestpractical.com
Thu May 30 10:10:30 EDT 2019
The branch 4.6-theme/search-pages was deleted and repushed:
was c17c4cc96bdeee51990fde19116b85efb0e030a2
now 710d5b8ed18d62482eeae10f8ee6dd6f3f5b1abc
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: ee901eaee Set root font size to 13px for elevator themes
---: ------- > 143: 91a00487d Smaller padding of table cells
142: c5926edf0 = 144: c5926edf0 Update README for third-party libraries we use for elevator themes
143: 040a1753c = 145: 040a1753c Migrate Admin/Queues/index to elevator themes
144: c38a865b0 = 146: c38a865b0 Migrate Admin/Queues/DefaultValues to elevator themes
145: 38f6769b3 = 147: 38f6769b3 Migrate Admin/Queues/GroupRights to elevator themes
146: e3bea7a0e = 148: e3bea7a0e Migrate Admin/Queues/People to elevator themes
147: 718b40ecd = 149: 718b40ecd Migrate Admin/Queues/Templates to elevator themes
148: 36cc62403 = 150: 36cc62403 Migrate Admin/Queues/Template to elevator themes
149: 4e1a6f49c = 151: 4e1a6f49c Migrate Admin/Queues/UserRights to elevator themes
150: feda57066 = 152: feda57066 Migrate Admin/Queues/Modify to elevator themes
151: 9a8faf24d = 153: 9a8faf24d Migrate Admin/Queues/Scrips to elevator themes
152: 3633771fd = 154: 3633771fd Migrate dashboards pages to elevator theme
153: 1af8daf08 = 155: 1af8daf08 Migrate login page to elevator theme
154: b07894c25 = 156: b07894c25 Fix a typo for css class list-group-borderless
155: bc2f1ee62 = 157: bc2f1ee62 Migrate admin custom roles pages to elevator theme
156: c336fd3bc = 158: c336fd3bc Migrate admin global rights pages to elevator themes
157: f2e1065f3 = 159: f2e1065f3 Migrate admin article topics to elevator themes
158: f2790eaa9 = 160: f2790eaa9 Migrate admin custom field modify pages to elevators
159: cbc683348 = 161: cbc683348 Migrate Admin/Users/index to elevator themes
160: 88e88305d = 162: 88e88305d Migrate Admin/Users/CustomFields to elevator themes
161: 59e133d18 = 163: 59e133d18 Migrate Admin/Users/DashboardsInMenu to elevator themes
162: 96dc2f3ef = 164: 96dc2f3ef Migrate Admin/Users/Keys to elevator themes
163: 0f5854a8f = 165: 0f5854a8f Migrate Admin/Users/Modify to elevator themes
164: aa193b3ec = 166: aa193b3ec Migrate Admin/Users/MyRT to elevator themes
165: e3a963616 = 167: e3a963616 Fix failing test
---: ------- > 168: 034714f5f Add Inter font(web hinted) 3.5
---: ------- > 169: 9a3818b06 Use Inter font for elevator themes
---: ------- > 170: ba38c0810 Migrate Admin/CustomFields/index to elevator themes
---: ------- > 171: a268ff604 Migrate Admin/CustomFields/GroupRights to elevator themes
---: ------- > 172: 1c1b38104 Migrate Admin/CustomFields/UserRights to elevator themes
---: ------- > 173: a45fb96a2 Migrate Admin/Articles/Classes/index to elevator themes
---: ------- > 174: c97747714 Migrate Admin/Articles/Classes/Modify to elevator themes
---: ------- > 175: ffa5da05f Migrate Admin/Articles/Classes/GroupRights to elevator themes
---: ------- > 176: 9067f8fbf Migrate Admin/Articles/Classes/Objects to elevator themes
---: ------- > 177: 1e7580438 Migrate Admin/Articles/Classes/UserRights to elevator themes
---: ------- > 178: 603a37fc0 Migrate tools pages for elevator theme
---: ------- > 179: adf04b399 Migrate Admin/Assets/Catalogs/Modify to elevator themes
---: ------- > 180: 747db72ec Migrate Admin/Assets/Catalogs/CustomFields to elevator themes
---: ------- > 181: 32f5757cd Migrate Admin/Assets/Catalogs/DefaultValues to elevator themes
---: ------- > 182: b5d9dc0fc Migrate Admin/Assets/Catalogs/GroupRights to elevator themes
---: ------- > 183: ffb3caddc Migrate Admin/Assets/Catalogs/Roles to elevator themes
---: ------- > 184: bc6c541ef Migrate Admin/Assets/Catalogs/UserRights to elevator themes
---: ------- > 185: 4759d3c48 Migrate Admin/Assets/Catalogs/index to elevator themes
---: ------- > 186: 118631f5a Fix inter font URL on production mode
---: ------- > 187: 39b73c679 Migrate SelfService pages to elevator theme
---: ------- > 188: 92fda6951 Migrate approvlas page to elevator theme
---: ------- > 189: b85bc73d9 Migrate /Admin/Tools/Shredder to elevator themes
166: c17c4cc96 ! 190: 710d5b8ed Migrate search pages to elevator theme
@@ -112,6 +112,7 @@
+ <div class="col-md-4 value">
+ <em><&|/l&>(Unsupported custom field type)</&></em>
+ </div>
++ </div>
% $RT::Logger->info("Unknown CustomField type: " . $cf->Type);
% next
% }
@@ -148,114 +149,103 @@
- <td class="labeltop"><&|/l&>Depends on</&>:</td>
- <td class="value">
+<div class="form-row">
-+
+ <div class="col-md-6">
++<h3><&|/l&>Current Links</&></h3>
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Depends on</&>:
++ </div>
++ <div class="col-md-9 value">
+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <h3><&|/l&>Current Links</&></h3>
-+ </div>
-+ <div class="col-md-9 value"></div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Depends on</&>:
-+ </div>
-+ <div class="col-md-9 value">
% if ( $hash{DependsOn} ) {
% for my $link ( values %{$hash{DependsOn}} ) {
-- <& EditLink, Link => $link, Mode => 'Target' &>
-+ <& EditLink, Link => $link, Mode => 'Target' &>
+ <& EditLink, Link => $link, Mode => 'Target' &>
% } }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Depended on by</&>:</td>
- <td class="value">
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Depended on by</&>:
-+ </div>
-+ <div class="col-md-9 value">
++ </div>
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Depended on by</&>:
++ </div>
++ <div class="col-md-9 value">
% if ( $hash{DependedOnBy} ) {
% for my $link ( values %{$hash{DependedOnBy}} ) {
-- <& EditLink, Link => $link, Mode => 'Base' &>
-+ <& EditLink, Link => $link, Mode => 'Base' &>
+ <& EditLink, Link => $link, Mode => 'Base' &>
% } }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Parents</&>:</td>
- <td class="value">
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Parents</&>:
-+ </div>
-+ <div class="col-md-9 value">
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Parents</&>:
++ </div>
++ <div class="col-md-9 value">
% if ( $hash{MemberOf} ) {
% for my $link ( values %{$hash{MemberOf}} ) {
-- <& EditLink, Link => $link, Mode => 'Target' &>
-+ <& EditLink, Link => $link, Mode => 'Target' &>
+ <& EditLink, Link => $link, Mode => 'Target' &>
% } }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Children</&>:</td>
- <td class="value">
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Children</&>:
-+ </div>
-+ <div class="col-md-9 value">
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Children</&>:
++ </div>
++ <div class="col-md-9 value">
% if ( $hash{Members} ) {
% for my $link ( values %{$hash{Members}} ) {
-- <& EditLink, Link => $link, Mode => 'Base' &>
-+ <& EditLink, Link => $link, Mode => 'Base' &>
+ <& EditLink, Link => $link, Mode => 'Base' &>
% } }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Refers to</&>:</td>
- <td class="value">
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Refers to</&>:
-+ </div>
-+ <div class="col-md-9 value">
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Refers to</&>:
++ </div>
++ <div class="col-md-9 value">
% if ( $hash{RefersTo} ) {
% for my $link ( values %{$hash{RefersTo}} ) {
-- <& EditLink, Link => $link, Mode => 'Target' &>
-+ <& EditLink, Link => $link, Mode => 'Target' &>
+ <& EditLink, Link => $link, Mode => 'Target' &>
% } }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Referred to by</&>:</td>
- <td class="value">
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Referred to by</&>:
-+ </div>
-+ <div class="col-md-9 value">
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Referred to by</&>:
++ </div>
++ <div class="col-md-9 value">
% if ( $hash{ReferredToBy} ) {
% for my $link ( values %{$hash{ReferredToBy}} ) {
-- <& EditLink, Link => $link, Mode => 'Base' &>
-+ <& EditLink, Link => $link, Mode => 'Base' &>
+ <& EditLink, Link => $link, Mode => 'Base' &>
% } }
- </td>
- </tr>
@@ -266,7 +256,19 @@
-</table>
-</td>
-<td valign="top">
--<h3><&|/l&>New Links</&></h3>
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3"></div>
++ <div class="col-md-9">
++ <i><&|/l&>(Check box to delete)</&></i>
++ </div>
++</div>
++</div>
++
++<div class="col-md-6">
+ <h3><&|/l&>New Links</&></h3>
-<em><&|/l&>Enter tickets or URIs to link to. Separate multiple entries with spaces.</&>
-</em><br />
-<table>
@@ -298,96 +300,83 @@
-</td>
-</tr>
-</table>
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <i><&|/l&>(Check box to delete)</&></i>
-+ </div>
-+ <div class="col-md-9 value"></div>
-+ </div>
-+
-+ </div>
-+
-+ <div class="col-md-6">
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <h3><&|/l&>New Links</&></h3>
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <em><&|/l&>Enter tickets or URIs to link to. Separate multiple entries with spaces.</&></em>
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Depends on</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <input type="text" class="form-control" name="<% $record_type %>-DependsOn" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ $record_type .'-DependsOn' } || '' %>" />
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Depended on by</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <input type="text" class="form-control" name="DependsOn-<% $record_type %>" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ 'DependsOn-'. $record_type } || '' %>" />
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Parents</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <input type="text" class="form-control" name="<% $record_type %>-MemberOf" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ $record_type .'-MemberOf'} || '' %>" />
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Children</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <input type="text" class="form-control" name="MemberOf-<% $record_type %>" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ 'MemberOf-'. $record_type } || '' %>" />
-+ </div>
-+ </div>
-+
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Refers to</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <input type="text" class="form-control" name="<% $record_type %>-RefersTo" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ $record_type .'-RefersTo'} || '' %>" />
-+ </div>
-+ </div>
-
-+ <div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Referred to by</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <input class="form-control" type="text" name="RefersTo-<% $record_type %>" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ 'RefersTo-'. $record_type } || '' %>" />
-+ </div>
-+ </div>
-+ </div>
-+</div>
++<em><&|/l&>Enter tickets or URIs to link to. Separate multiple entries with spaces.</&></em>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Depends on</&>:
++ </div>
++ <div class="col-md-9 value">
++ <input class="form-control" type="text" name="<% $record_type %>-DependsOn" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ $record_type .'-DependsOn' } || '' %>" />
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Depended on by</&>:
++ </div>
++ <div class="col-md-9 value">
++ <input class="form-control" type="text" name="DependsOn-<% $record_type %>" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ 'DependsOn-'. $record_type } || '' %>" />
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Parents</&>:
++ </div>
++ <div class="col-md-9 value">
++ <input class="form-control" type="text" name="<% $record_type %>-MemberOf" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ $record_type .'-MemberOf'} || '' %>" />
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Children</&>:
++ </div>
++ <div class="col-md-9 value">
++ <input class="form-control" type="text" name="MemberOf-<% $record_type %>" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ 'MemberOf-'. $record_type } || '' %>" />
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Refers to</&>:
++ </div>
++ <div class="col-md-9 value">
++ <input class="form-control" type="text" name="<% $record_type %>-RefersTo" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ $record_type .'-RefersTo'} || '' %>" />
++ </div>
++</div>
++
++<div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Referred to by</&>:
++ </div>
++ <div class="col-md-9 value">
++ <input class="form-control" type="text" name="RefersTo-<% $record_type %>" data-autocomplete="Tickets" data-autocomplete-multiple="1" value="<% $ARGS{ 'RefersTo-'. $record_type } || '' %>" />
++ </div>
++</div>
++</div>
++
++</div>
+
<%ARGS>
$Collection
- </%ARGS>
diff --git a/share/html/Search/Bulk.html b/share/html/Search/Bulk.html
--- a/share/html/Search/Bulk.html
+++ b/share/html/Search/Bulk.html
@@
- <& /Elements/Submit, Label => loc('Update'), CheckboxNameRegex => '/^UpdateTicket(All)?$/', CheckAll => 1, ClearAll => 1 &>
- <br />
+
+ <hr />
+
+-<& /Elements/Submit, Label => loc('Update'), CheckboxNameRegex => '/^UpdateTicket(All)?$/', CheckAll => 1, ClearAll => 1 &>
+-<br />
++<div class="form-row">
++ <div class="col-md-12">
++ <& /Elements/Submit, Label => loc('Update'), CheckboxNameRegex => '/^UpdateTicket(All)?$/', CheckAll => 1, ClearAll => 1 &>
++ </div>
++</div>
++
<&|/Widgets/TitleBox, title => $title &>
-<table>
-<tr>
@@ -409,59 +398,78 @@
-<td class="value"> <& /Elements/EmailInput, Name => "AddAdminCc", Size=> 20, Default => $ARGS{AddAdminCc} &> </td></tr>
-<tr><td class="label"> <&|/l&>Remove AdminCc</&>: </td>
-<td class="value"> <& /Elements/EmailInput, Name => "DeleteAdminCc", Size=> 20, Default => $ARGS{DeleteAdminCc} &> </td></tr>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label"> <&|/l&>Make Owner</&>: </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/SelectOwner, Name => "Owner", Default => $ARGS{Owner} || '' &>
-+ <div class="custom-control custom-checkbox">
-+ <input type="checkbox" class="custom-control-input" id="ForceOwnerChange" name="ForceOwnerChange" <% $ARGS{ForceOwnerChange} ? 'checked="checked"' : '' %> />
-+ <label class="custom-control-label" for="ForceOwnerChange">( <&|/l&>Force change</&>)</label>
-+ </div>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label"> <&|/l&>Add Requestor</&>: </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EmailInput, Name => "AddRequestor", Size=> 20, Default => $ARGS{AddRequestor} &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label"> <&|/l&>Remove Requestor</&>: </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EmailInput, Name => "DeleteRequestor", Size=> 20, Default => $ARGS{DeleteRequestor} &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label"> <&|/l&>Add Cc</&>: </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EmailInput, Name => "AddCc", Size=> 20, Default => $ARGS{AddCc} &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label"> <&|/l&>Remove Cc</&>: </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EmailInput, Name => "DeleteCc", Size=> 20, Default => $ARGS{DeleteCc} &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label"> <&|/l&>Add AdminCc</&>: </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EmailInput, Name => "AddAdminCc", Size=> 20, Default => $ARGS{AddAdminCc} &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label"> <&|/l&>Remove AdminCc</&>: </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EmailInput, Name => "DeleteAdminCc", Size=> 20, Default => $ARGS{DeleteAdminCc} &>
-+ </div>
-+</div>
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make Owner</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SelectOwner, Name => "Owner", Default => $ARGS{Owner} || '' &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label"></div>
++ <div class="custom-control custom-checkbox col-md-9 value">
++ <input type="checkbox" id="ForceOwnerChange" class="checkbox custom-control-input" name="ForceOwnerChange"
++ <% $ARGS{ForceOwnerChange} ? 'checked="checked"' : '' %>
++ />
++ <label for="ForceOwnerChange" class="custom-control-label">(<&|/l&>Force change</&>)</label>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Add Requestor</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EmailInput, Name => "AddRequestor", Size=> 20, Default => $ARGS{AddRequestor} &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Remove Requestor</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EmailInput, Name => "DeleteRequestor", Size=> 20, Default => $ARGS{DeleteRequestor} &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Add Cc</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EmailInput, Name => "AddCc", Size=> 20, Default => $ARGS{AddCc} &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Remove Cc</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EmailInput, Name => "DeleteCc", Size=> 20, Default => $ARGS{DeleteCc} &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Add AdminCc</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EmailInput, Name => "AddAdminCc", Size=> 20, Default => $ARGS{AddAdminCc} &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Remove AdminCc</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EmailInput, Name => "AddAdminCc", Size=> 20, Default => $ARGS{AddAdminCc} &>
++ </div>
++ </div>
% my $single_roles = RT::CustomRoles->new($session{CurrentUser});
% $single_roles->LimitToSingleValue;
@@ -471,14 +479,14 @@
-<td class="label"> <&|/l, $role->Name &>Make [_1]</&>: </td>
-<td class="value"><& /Elements/SingleUserRoleInput, role => $role, ShowPlaceholder => 0, ShowEntryHint => 0, Size => 20, Default => $ARGS{"RT::CustomRole-" . $role->Id} &></td>
-</tr>
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l, $role->Name &>Make [_1]</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/SingleUserRoleInput, role => $role, ShowPlaceholder => 0, ShowEntryHint => 0, Size => 20, Default => $ARGS{"RT::CustomRole-" . $role->Id} &>
-+ </div>
-+</div>
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l, $role->Name &>Make [_1]</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SingleUserRoleInput, role => $role, ShowPlaceholder => 0, ShowEntryHint => 0, Size => 20, Default => $ARGS{"RT::CustomRole-" . $role->Id} &>
++ </div>
++ </div>
% }
% my $multi_roles = RT::CustomRoles->new($session{CurrentUser});
@@ -493,23 +501,23 @@
-<td class="label"> <&|/l, $role->Name &>Remove [_1]</&>: </td>
-<td class="value"> <& /Elements/EmailInput, Name => "DeleteRT::CustomRole-" . $role->Id, Size=> 20, Default => $ARGS{"DeleteRT::CustomRole-" . $role->Id} &> </td>
-</tr>
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l, $role->Name &>Add [_1]</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EmailInput, Name => "AddRT::CustomRole-" . $role->Id, Size=> 20, Default => $ARGS{"AddRT::CustomRole-" . $role->Id} &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l, $role->Name &>Remove [_1]</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EmailInput, Name => "DeleteRT::CustomRole-" . $role->Id, Size=> 20, Default => $ARGS{"DeleteRT::CustomRole-" . $role->Id} &>
-+ </div>
-+</div>
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l, $role->Name &>Add [_1]</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EmailInput, Name => "AddRT::CustomRole-" . $role->Id, Size=> 20, Default => $ARGS{"AddRT::CustomRole-" . $role->Id} &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l, $role->Name &>Remove [_1]</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EmailInput, Name => "DeleteRT::CustomRole-" . $role->Id, Size=> 20, Default => $ARGS{"DeleteRT::CustomRole-" . $role->Id} &>
++ </div>
++ </div>
% }
-</table>
@@ -524,53 +532,54 @@
-<td class="value"> <& /Elements/SelectQueue, Name => "Queue", Default => $ARGS{Queue} &> </td></tr>
-<tr><td class="label"> <&|/l&>Make Status</&>: </td>
-<td class="value"> <& /Ticket/Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}, Queues => $seen_queues &> </td></tr>
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Make subject</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <input class="form-control" type="text" name="Subject" size="20" value="<% $ARGS{Subject} || '' %>"/>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Make priority</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/SelectPriority, Name => "Priority", Default => $ARGS{Priority} &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Make queue</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/SelectQueue, Name => "Queue", Default => $ARGS{Queue} &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Make Status</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Ticket/Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}, Queues => $seen_queues &>
-+ </div>
-+</div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make subject</&>:
++ </div>
++ <div class="col-md-9 value">
++ <input class="form-control" type="text" name="Subject" size="20" value="<% $ARGS{Subject} || '' %>"/>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make priority</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SelectPriority, Name => "Priority", Default => $ARGS{Priority} &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make queue</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SelectQueue, Name => "Queue", Default => $ARGS{Queue} &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make Status</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Ticket/Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}, Queues => $seen_queues &>
++ </div>
++ </div>
+
% if ($hasSLA) {
-<tr><td class="label"> <&|/l&>Make SLA</&>: </td>
-<td class="value"> <& /Elements/SelectSLA, Name => "SLA", Default => $ARGS{SLA} &> </td></tr>
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Make SLA</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/SelectSLA, Name => "SLA", Default => $ARGS{SLA} &>
-+ </div>
-+</div>
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make SLA</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SelectSLA, Name => "SLA", Default => $ARGS{SLA} &>
++ </div>
++ </div>
% }
-<tr><td class="label"> <&|/l&>Make date Starts</&>: </td>
-<td class="value"> <& /Elements/SelectDate, Name => "Starts_Date", Default => $ARGS{Starts_Date} || '' &> </td></tr>
@@ -586,33 +595,41 @@
-</tr>
-</table>
+
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Make date Starts</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/SelectDate, Name => "Starts_Date", Default => $ARGS{Starts_Date} || '' &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Make date Told</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/SelectDate, Name => "Told_Date", Default => $ARGS{Told_Date} || '' &>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Make date Due</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/SelectDate, Name => "Due_Date", Default => $ARGS{Due_Date} || '' &>
-+ </div>
-+</div>
-+
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make date Starts</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SelectDate, Name => "Starts_Date", Default => $ARGS{Starts_Date} || '' &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make date Started</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SelectDate, Name => "Started_Date", Default => $ARGS{Started_Date} || '' &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make date Told</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SelectDate, Name => "Told_Date", Default => $ARGS{Told_Date} || '' &>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Make date Due</&>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/SelectDate, Name => "Due_Date", Default => $ARGS{Due_Date} || '' &>
++ </div>
++ </div>
</&>
<&| /Widgets/TitleBox, title => loc('Add comments or replies to selected tickets') &>
-<table>
@@ -626,29 +643,29 @@
- <td align="right"><&|/l&>Subject</&>:</td>
- <td>
- <input type="text" name="UpdateSubject" size="60" value="<% $ARGS{UpdateSubject} || "" %>" />
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Update Type</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <select name="UpdateType" id="UpdateType" class="form-control selectpicker">
-+ <option value="private" <% $ARGS{UpdateType} && $ARGS{UpdateType} eq 'private' ? 'selected="selected"' : '' %> ><&|/l&>Comments (Not sent to requestors)</&></option>
-+ <option value="response" <% $ARGS{UpdateType} && $ARGS{UpdateType} eq 'response' ? 'selected="selected"' : '' %>><&|/l&>Reply to requestors</&></option>
-+ </select>
-+ </div>
-+</div>
-+
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <&|/l&>Subject</&>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <input type="text" class="form-control" name="UpdateSubject" size="60" value="<% $ARGS{UpdateSubject} || "" %>" />
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Update Type</&>:
++ </div>
++ <div class="col-md-9 value">
++ <select class="form-control selectpicker" name="UpdateType" id="UpdateType">
++ <option value="private" <% $ARGS{UpdateType} && $ARGS{UpdateType} eq 'private' ? 'selected="selected"' : '' %> ><&|/l&>Comments (Not sent to requestors)</&></option>
++ <option value="response" <% $ARGS{UpdateType} && $ARGS{UpdateType} eq 'response' ? 'selected="selected"' : '' %>><&|/l&>Reply to requestors</&></option>
++ </select>
++ </div>
++ </div>
++
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Subject</&>:
++ </div>
++ <div class="col-md-9 value">
++ <input class="form-control" type="text" name="UpdateSubject" size="60" value="<% $ARGS{UpdateSubject} || "" %>" />
++ </div>
++ </div>
% $m->callback( %ARGS, CallbackName => 'AfterUpdateSubject' );
- </td>
-</tr>
-+ </div>
-+</div>
+
% $m->callback( CallbackName => 'BeforeTransactionCustomFields', CustomFields => $TxnCFs );
% while (my $CF = $TxnCFs->Next()) {
@@ -659,28 +676,27 @@
- Object => RT::Transaction->new( $session{'CurrentUser'} ),
- &><em><% $CF->EntryHint // '' %></em></td>
-</td></tr>
-+<div class="form-row">
-+ <div class="col-md-3 label">
-+ <% $CF->Name %>:
-+ </div>
-+ <div class="col-md-9 value">
-+ <& /Elements/EditCustomField,
-+ CustomField => $CF,
-+ Object => RT::Transaction->new( $session{'CurrentUser'} ),
-+ &>
-+ <em><% $CF->EntryHint // '' %></em>
-+ </div>
-+</div>
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <% $CF->Name %>:
++ </div>
++ <div class="col-md-9 value">
++ <& /Elements/EditCustomField,
++ CustomField => $CF,
++ Object => RT::Transaction->new( $session{'CurrentUser'} ),
++ &><em><% $CF->EntryHint // '' %></em>
++ </div>
++ </div>
% } # end if while
- <tr><td class="labeltop"><&|/l&>Message</&>:</td>
- <td class="messagebox-container action-<% $ARGS{UpdateType} || 'private' %>">
-+<div class="form-row">
-+ <div class="col-md-3 label labeltop">
-+ <&|/l&>Message</&>:
-+ </div>
-+ <div class="col-md-9 value messagebox-container action-<% $ARGS{UpdateType} || 'private' %>">
- % $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' );
+-% $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' );
++ <div class="form-row">
++ <div class="col-md-3 label">
++ <&|/l&>Message</&>:
++ </div>
++ <div class="col-md-9 value messagebox-container action-<% $ARGS{UpdateType} || 'private' %>">
%# Currently, bulk update always starts with Comment not Reply selected, so we check this unconditionally
% my $IncludeSignature = RT->Config->Get('MessageBoxIncludeSignatureOnComment');
-<& /Elements/MessageBox, Name => "UpdateContent",
@@ -690,21 +706,30 @@
- </td></tr>
-
-<& /Ticket/Elements/AddAttachments, %ARGS &>
-+ <& /Elements/MessageBox, Name => "UpdateContent",
-+ $ARGS{UpdateContent} ? ( Default => $ARGS{UpdateContent}, IncludeSignature => 0 ) :
-+ ( IncludeSignature => $IncludeSignature ),
-+ &>
-+ </div>
-+</div>
++ <& /Elements/MessageBox, Name => "UpdateContent",
++ $ARGS{UpdateContent} ? ( Default => $ARGS{UpdateContent}, IncludeSignature => 0 ) :
++ ( IncludeSignature => $IncludeSignature ),
++ &>
++ </div>
++ </div>
++% $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' );
- </table>
-+<div class="form-row">
-+ <div class="col-md-3 label"></div>
-+ <div class="col-md-9 value">
-+ <& /Ticket/Elements/AddAttachments, %ARGS &>
-+ </div>
-+</div>
-
++ <div class="form-row">
++ <div class="col-md-3 label"></div>
++ <div class="col-md-9">
++ <& /Ticket/Elements/AddAttachments, %ARGS &>
++ </div>
++ </div>
+
+ </&>
+
+@@
+ % }
+
+ <&|/Widgets/TitleBox, title => loc('Edit Links'), color => "#336633"&>
+-<em><&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.</&></em><br />
+ <& /Elements/BulkLinks, Collection => $Tickets, $ARGS{'AddMoreAttach'} ? %ARGS : () &>
</&>
@@
@@ -712,15 +737,14 @@
</&>
-<& /Elements/Submit, Label => loc('Update') &>
--
+<div class="form-row">
+ <div class="col-md-12">
+ <& /Elements/Submit, Label => loc('Update') &>
+ </div>
+</div>
+
</form>
-
diff --git a/share/html/Search/Chart.html b/share/html/Search/Chart.html
--- a/share/html/Search/Chart.html
@@ -899,105 +923,156 @@
</div>
</div>
-diff --git a/share/html/Search/Edit.html b/share/html/Search/Edit.html
---- a/share/html/Search/Edit.html
-+++ b/share/html/Search/Edit.html
-@@
- <input type="hidden" class="hidden" name="SavedSearchId" value="<% $SavedSearchId %>" />
- <input type="hidden" class="hidden" name="SavedChartSearchId" value="<% $SavedChartSearchId %>" />
- <&|/Widgets/TitleBox, title => loc('Query'), &>
--<textarea name="Query" rows="8" cols="72"><% $Query %></textarea>
-+<textarea class="form-control" name="Query" rows="8" cols="72"><% $Query %></textarea>
- </&>
- <&|/Widgets/TitleBox, title => loc('Format'), &>
--<textarea name="Format" rows="8" cols="72"><% $Format %></textarea>
-+<textarea class="form-control" name="Format" rows="8" cols="72"><% $Format %></textarea>
- </&>
--<& /Elements/Submit, Label => loc("Apply"), Reset => 1, Caption => loc("Apply your changes")&>
-+<div class="form-row">
-+ <div class="col-md-12">
-+ <& /Elements/Submit, Label => loc("Apply"), Reset => 1, Caption => loc("Apply your changes")&>
-+ </div>
-+</div>
- </form>
-
- <%INIT>
+diff --git a/share/html/Search/Elements/> b/share/html/Search/Elements/>
+new file mode 100644
+--- /dev/null
++++ b/share/html/Search/Elements/>
+@@
++%# BEGIN BPS TAGGED BLOCK {{{
++%#
++%# COPYRIGHT:
++%#
++%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC
++%# <sales at 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 }}}
++<%args>
++$Query => "id > 0"
++ at GroupBy => ()
++$ChartStyle => 'bar+table+sql'
++ at ChartFunction => 'COUNT'
++</%args>
++<%init>
++use RT::Report::Tickets;
++
++my $report = RT::Report::Tickets->new( $session{'CurrentUser'} );
++
++my %columns = $report->SetupGroupings(
++ Query => $Query,
++ GroupBy => \@GroupBy,
++ Function => \@ChartFunction,
++);
++
++$report->SortEntries;
++
++my $query_string = $m->comp('/Elements/QueryString', %ARGS, GroupBy => \@GroupBy );
++</%init>
++<div class="chart-wrapper form-row">
++<div class="col-md-auto">
++% if ( ($ChartStyle || '') =~ /\b(pie|bar)\b/ ) {
++<span class="chart image <% $1 %>">
++% if (RT->Config->Get('DisableGD')) {
++<% loc('Graphical charts are not available.') %><br />
++% } else {
++% my $key = Digest::MD5::md5_hex( rand(1024) );
++% $session{'charts_cache'}{$key} = { columns => \%columns, report => $report->Serialize };
++% $session{'i'}++;
++<img src="<% RT->Config->Get('WebPath') %>/Search/Chart?Cache=<% $key |un %>&<% $query_string |n %>" />
++% }
++</span>
++% }
++</div>
++<div class="col-md-auto">
++% if ( ($ChartStyle || '') =~ /\btable\b/ ) {
++<& ChartTable, %ARGS, Table => { $report->FormatTable( %columns ) } &>
++% }
++
++% $m->callback( CallbackName => 'AfterChartTable', ARGSRef => \%ARGS );
++</div>
++<div class="form-row"?
++% if ( ($ChartStyle || '') =~ /\bsql\b/ ) {
++<div class="query"><span class="label"><% loc('Query') %>:</span><span class="value"><% $Query %></span></div>
++% }
++</div>
++</div>
+
+diff --git a/share/html/Search/Elements/Chart b/share/html/Search/Elements/Chart
+--- a/share/html/Search/Elements/Chart
++++ b/share/html/Search/Elements/Chart
+@@
+
+ my $query_string = $m->comp('/Elements/QueryString', %ARGS, GroupBy => \@GroupBy );
+ </%init>
+-<div class="chart-wrapper">
++<div class="chart-wrapper form-row">
++<div class="col-md-auto">
+ % if ( ($ChartStyle || '') =~ /\b(pie|bar)\b/ ) {
+ <span class="chart image <% $1 %>">
+ % if (RT->Config->Get('DisableGD')) {
+@@
+ % }
+ </span>
+ % }
+-
++</div>
++<div class="col-md-auto">
+ % if ( ($ChartStyle || '') =~ /\btable\b/ ) {
+ <& ChartTable, %ARGS, Table => { $report->FormatTable( %columns ) } &>
+ % }
+
+ % $m->callback( CallbackName => 'AfterChartTable', ARGSRef => \%ARGS );
+-
++</div>
++</div>
++<div class="form-row justify-content-center">
++<div class="col-md-auto">
+ % if ( ($ChartStyle || '') =~ /\bsql\b/ ) {
+ <div class="query"><span class="label"><% loc('Query') %>:</span><span class="value"><% $Query %></span></div>
+ % }
+ </div>
++</div>
diff --git a/share/html/Search/Elements/ChartTable b/share/html/Search/Elements/ChartTable
--- a/share/html/Search/Elements/ChartTable
+++ b/share/html/Search/Elements/ChartTable
@@
-
- $m->out("<$section>\n");
- foreach my $row ( @{ $Table{ $section } } ) {
-- $m->out(' <tr');
-- $m->out(' class="'. ($row->{'even'}? 'evenline' : 'oddline') .'"')
-+ $m->out('<div');
-+ $m->out(' class="form-row '. ($row->{'even'}? 'evenline' : 'oddline') .'"')
- if defined $row->{'even'};
- $m->out(">");
-
-
-diff --git a/share/html/Search/Elements/PickObjectCFs b/share/html/Search/Elements/PickObjectCFs
---- a/share/html/Search/Elements/PickObjectCFs
-+++ b/share/html/Search/Elements/PickObjectCFs
-@@
- $CustomFields->GotoFirstItem;
- </%init>
- % if ($has_cf) {
--<tr class="separator">
-- <td colspan="3">
-+<div class="form-row seperator">
-+ <div class="col-md-3 label">
- <hr><em><% loc("[_1] CFs", loc($Class)) %></em>
-- </td>
--</tr>
-+ </div>
-+</div>
- % }
- <& PickCFs, %ARGS, TicketSQLField => "${Class}CF", CustomFields => $CustomFields &>
-
-diff --git a/share/html/Search/Elements/SelectAndOr b/share/html/Search/Elements/SelectAndOr
---- a/share/html/Search/Elements/SelectAndOr
-+++ b/share/html/Search/Elements/SelectAndOr
-@@
- %# those contributions and any derivatives thereof.
- %#
- %# END BPS TAGGED BLOCK }}}
--<div class="form-check form-check-inline">
-- <input class="form-check-input" type="radio" name="<% $Name %>" checked="checked" id="<% $Name %>-and" value="AND">
-- <label class="form-check-label" for="<% $Name %>-and"><&|/l&>AND</&></label>
-+<div class="form-row">
-+ <div class="custom-control custom-radio">
-+ <input class="custom-control-input" type="radio" name="<% $Name %>" checked="checked" id="<% $Name %>-and" value="AND">
-+ <label class="custom-control-label" for="<% $Name %>-and"><&|/l&>AND</&> </label>
-+ </div>
-+ <div class="custom-control custom-radio">
-+ <input class="custom-control-input" type="radio" name="<% $Name %>" id="<% $Name %>-or" value="AND">
-+ <label class="custom-control-label" for="<% $Name %>-or"><&|/l&>OR</&></label>
-+ </div>
- </div>
--<div class="form-check form-check-inline">
-- <input class="form-check-input" type="radio" name="<% $Name %>" id="<% $Name %>-or" value="AND">
-- <label class="form-check-label" for="<% $Name %>-or"><&|/l&>OR</&></label>
--</div>
--
- <%ARGS>
- $Name => "Operator"
- </%ARGS>
-
-diff --git a/share/html/Search/Elements/SelectChartFunction b/share/html/Search/Elements/SelectChartFunction
---- a/share/html/Search/Elements/SelectChartFunction
-+++ b/share/html/Search/Elements/SelectChartFunction
-@@
- %# those contributions and any derivatives thereof.
- %#
- %# END BPS TAGGED BLOCK }}}
--<select name="<% $Name %>" class="cascade-by-optgroup">
-+<select name="<% $Name %>" class="cascade-by-optgroup form-control selectpicker">
- % if ( $ShowEmpty ) {
- <option value=""> </option>
- % }
+ my $eh = sub { $interp->apply_escapes( @_, 'h' ) };
+ my $eu = sub { $interp->apply_escapes( @_, 'u' ) };
+
+-$m->out('<table class="collection-as-table chart">'. "\n");
++$m->out('<table class="table table-bordered collection-as-table chart">'. "\n");
+ foreach my $section (qw(thead tbody tfoot)) {
+ next unless $Table{ $section } && @{ $Table{ $section } };
+
diff --git a/share/html/Search/Elements/SelectChartType b/share/html/Search/Elements/SelectChartType
--- a/share/html/Search/Elements/SelectChartType
@@ -1025,51 +1100,41 @@
<option value="">-</option>
% }
-diff --git a/share/html/Search/Elements/SelectGroupBy b/share/html/Search/Elements/SelectGroupBy
---- a/share/html/Search/Elements/SelectGroupBy
-+++ b/share/html/Search/Elements/SelectGroupBy
-@@
- $Query => ''
- $ShowEmpty => 0
- </%args>
--<select name="<% $Name %>" class="cascade-by-optgroup">
-+<select name="<% $Name %>" class="cascade-by-optgroup form-control selectpicker">
- % if ( $ShowEmpty ) {
- <option value=""> </option>
- % }
-
-diff --git a/share/html/Search/Results.html b/share/html/Search/Results.html
---- a/share/html/Search/Results.html
-+++ b/share/html/Search/Results.html
-@@
- <input type="hidden" class="hidden" name="<%$key%>" value="<% defined($hiddens{$key})?$hiddens{$key}:'' %>" />
- % }
- <& /Elements/Refresh, Name => 'TicketsRefreshInterval', Default => $session{'tickets_refresh_interval'}||RT->Config->Get('SearchResultsRefreshInterval', $session{'CurrentUser'}) &>
--<input type="submit" class="button" value="<&|/l&>Change</&>" />
-+<div class="form-row">
-+ <div class="col-md-12">
-+ <input type="submit" class="button btn btn-primary" value="<&|/l&>Change</&>" />
-+ </div>
-+</div>
- </form>
- </div>
-
-
diff --git a/share/html/Search/Simple.html b/share/html/Search/Simple.html
--- a/share/html/Search/Simple.html
+++ b/share/html/Search/Simple.html
@@
+ <div id="SimpleSearchForm">
<form action="Simple.html" method="get">
- <div align="center">
+-<div align="center">
-<input type="text" name="q" />
-<input type="submit" class="button" value="<&|/l&>Search</&>" />
-+ <div class="form-row">
-+ <input type="text" class="form-control" name="q" />
-+ </div>
-+ <div class="form-row justify-content-center">
++<div class="form-row justify-content-center">
++ <div class="col-md-4">
++ <input class="form-control" type="text" name="q" />
++ </div>
++ <div class="col-md-auto">
+ <input type="submit" class="button btn btn-primary" value="<&|/l&>Search</&>" />
+ </div>
</div>
% my @strong = qw(<strong> </strong>);
+
+diff --git a/share/html/Ticket/Elements/AddAttachments b/share/html/Ticket/Elements/AddAttachments
+--- a/share/html/Ticket/Elements/AddAttachments
++++ b/share/html/Ticket/Elements/AddAttachments
+@@
+ });
+ </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 type="file" id="Attach" name="Attach" class="custom-file-input" />
++ <label class="custom-file-label" for="Attach"><&|/l&>Add More Files</&></label>
++ <input type="hidden" class="hidden" name="UpdateAttach" value="1" />
++ </div>
+ </div>
+ </span>
+ </div>
More information about the rt-commit
mailing list