Mailing List Archive

rt branch, 4.6-theme/misc, created. rt-4.4.4-324-g20e63faf3
The branch, 4.6-theme/misc has been created
at 20e63faf34e73748cb4fae60cf65840b169f76a0 (commit)

- Log -----------------------------------------------------------------
commit 432cd09ba362b7c9ccc6ccb64ddc303d95060916
Author: sunnavy <sunnavy@bestpractical.com>
Date: Thu Jul 18 04:30:08 2019 +0800

Add back BeforeRequestors callback on ticket create page

It was removed by accident in 0b1e7df317(Make ticket create responsive)

diff --git a/share/html/Ticket/Create.html b/share/html/Ticket/Create.html
index 55a220f07..ebc2d194c 100644
--- a/share/html/Ticket/Create.html
+++ b/share/html/Ticket/Create.html
@@ -143,6 +143,7 @@
<div id="ticket-create-message">
<&| /Widgets/TitleBox, title => $title, class => 'messagedetails' &>
<div class="fields">
+% $m->callback(CallbackName => 'BeforeRequestors', QueueObj => $QueueObj, ARGSRef => \%ARGS);

<div class="field">
<span class="label"><&|/l&>Requestors</&>:</span>

commit 42b224dfd04d480efe23b60a6977662fb4d257d7
Author: sunnavy <sunnavy@bestpractical.com>
Date: Fri Jul 19 01:03:15 2019 +0800

Horizontally align label/value columns in form-row

diff --git a/share/static/css/elevator-light/forms.css b/share/static/css/elevator-light/forms.css
index 751400ad4..21ffe40f5 100644
--- a/share/static/css/elevator-light/forms.css
+++ b/share/static/css/elevator-light/forms.css
@@ -133,6 +133,7 @@ div.field label.select-queue {
span.current-value.form-control {
border: none;
padding-left: 0;
+ margin-top: 1px; /* because input box border is 1px */
}

.current-watchers div.label {
@@ -163,3 +164,7 @@ span.current-value.form-control {
.input-group input.btn {
margin-left: 0.5em;
}
+
+.form-row .label {
+ padding-top: calc(0.375rem + 1px);
+}

commit 7d84144ad20436f64fe63d4531433c498bfc8c49
Author: sunnavy <sunnavy@bestpractical.com>
Date: Fri Jul 19 01:54:15 2019 +0800

Migrate cascaded select to selectpicker

diff --git a/share/html/Search/Elements/SelectChartFunction b/share/html/Search/Elements/SelectChartFunction
index 683adc9f5..587071de0 100644
--- a/share/html/Search/Elements/SelectChartFunction
+++ b/share/html/Search/Elements/SelectChartFunction
@@ -45,7 +45,7 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<select name="<% $Name %>" class="cascade-by-optgroup">
+<select name="<% $Name %>" class="cascade-by-optgroup selectpicker">
% if ( $ShowEmpty ) {
<option value="">&nbsp;</option>
% }
diff --git a/share/html/Search/Elements/SelectGroupBy b/share/html/Search/Elements/SelectGroupBy
index 95b5ee1fb..1d725fc94 100644
--- a/share/html/Search/Elements/SelectGroupBy
+++ b/share/html/Search/Elements/SelectGroupBy
@@ -51,7 +51,7 @@ $Default => 'Status'
$Query => ''
$ShowEmpty => 0
</%args>
-<select name="<% $Name %>" class="cascade-by-optgroup">
+<select name="<% $Name %>" class="cascade-by-optgroup selectpicker">
% if ( $ShowEmpty ) {
<option value="">&nbsp;</option>
% }
diff --git a/share/static/css/base-responsive/charts.css b/share/static/css/base-responsive/charts.css
index 31baf7cee..d2e9b1ee1 100644
--- a/share/static/css/base-responsive/charts.css
+++ b/share/static/css/base-responsive/charts.css
@@ -26,3 +26,7 @@
.chart-wrapper .collection-as-table tr th.oddline {
background: #ddd;
}
+
+.cascade-by-optgroup {
+ margin-right: 5px;
+}
diff --git a/share/static/js/cascaded.js b/share/static/js/cascaded.js
index 9f625867b..0a516bb6b 100644
--- a/share/static/js/cascaded.js
+++ b/share/static/js/cascaded.js
@@ -78,4 +78,8 @@ function filter_cascade_select (select, complete_select, vals) {
cloned_empty_label = true;
}
}
+
+ if ( jQuery(select).hasClass('selectpicker') ) {
+ jQuery(select).selectpicker('refresh');
+ }
}
diff --git a/share/static/js/event-registration.js b/share/static/js/event-registration.js
index eaacbdb57..a83bc17f7 100644
--- a/share/static/js/event-registration.js
+++ b/share/static/js/event-registration.js
@@ -52,7 +52,7 @@ jQuery(function() {
.clone(true, true)
.attr("name", name + "-Complete")
.attr("disabled", "disabled")
- .hide()
+ .addClass('hidden')
.insertAfter(this);

var groups = jQuery(this)
@@ -74,8 +74,8 @@ jQuery(function() {
groups.change(function(){
var name = this.name.replace(/-Groups$/, '');
var field = jQuery(this);
- var subfield = field.next("select[name=" + name + "]");
- var complete = subfield.next("select[name=" + name + "-Complete]");
+ var subfield = field.closest('fieldset').find("select[name=" + name + "]");
+ var complete = field.closest('fieldset').find("select[name=" + name + "-Complete]");
var value = field.val();
filter_cascade_select( subfield[0], complete[0], value );
}).change();

commit 569d54dd9254f67bc8127ed4bdfa752f1c0bd135
Author: sunnavy <sunnavy@bestpractical.com>
Date: Sat Jul 20 04:43:03 2019 +0800

Migrate /Widgets/Form to elevator themes

diff --git a/share/html/Widgets/Form/Boolean b/share/html/Widgets/Form/Boolean
index 969a7e6a9..e509f9495 100644
--- a/share/html/Widgets/Form/Boolean
+++ b/share/html/Widgets/Form/Boolean
@@ -48,10 +48,14 @@
<%DOC>
see docs/extending/using_forms_widgets.pod
</%DOC>
-<div id="form-box-<% lc $Name %>" class="widget">
-<span class="label description"><% $Description %></span>
-<span class="value"><& SELF:InputOnly, %ARGS &></span>
-<span class="hints"><% $Hints %></span>
+<div id="form-box-<% lc $Name %>" class="widget form-row">
+ <div class="col-md-3 label">
+ <% $Description // '' %>
+ </div>
+ <div class="col-md-9 value">
+ <& SELF:InputOnly, %ARGS &>
+ <span class="hints"><% $Hints %></span>
+ </div>
</div>
<%ARGS>
$Name => undef,
@@ -71,20 +75,33 @@ $CurrentValue => undef,
</%ARGS>
% unless ( $Default ) {
<input type="hidden" name="<% $Name %>" value="0" />\
-<input type="checkbox" name="<% $Name %>" value="1" <% $CurrentValue? ' checked="checked"': '' |n %> />\
+<div class="custom-control custom-checkbox">
+ <input type="checkbox" id="<% $Name %>" name="<% $Name %>" class="custom-control-input" value="1" <% $CurrentValue? ' checked="checked"': '' |n %>>
+ <label class="custom-control-label" for="<% $Name %>"><% $DefaultLabel %></label>
+</div>
% } else {
-<label>
- <input type="radio" name="<% $Name %>" value="1" <% $CurrentValue? ' checked="checked"': '' |n %> />\
- <% loc('Yes') %>
-</label>
-<label>
- <input type="radio" name="<% $Name %>" value="0" <% defined $CurrentValue && !$CurrentValue? ' checked="checked"': '' |n %> />\
- <% loc('No') %>
-</label>
-<label>
- <input type="radio" name="<% $Name %>" value="__empty_value__" <% !defined $CurrentValue? ' checked="checked"': '' |n %> />\
- <% $DefaultLabel %>
-</label>
+<div class="form-row">
+ <div class="col-md-auto">
+ <div class="custom-control custom-radio">
+ <input type="radio" id="<% $Name %>-yes" name="<% $Name %>" class="custom-control-input" value="1" <% $CurrentValue? ' checked="checked"': '' |n %>>
+ <label class="custom-control-label" for="<% $Name %>-yes"><&|/l&>Yes</&></label>
+ </div>
+ </div>
+
+ <div class="col-md-auto">
+ <div class="custom-control custom-radio">
+ <input type="radio" id="<% $Name %>-no" name="<% $Name %>" class="custom-control-input" value="0" <% defined $CurrentValue && !$CurrentValue? ' checked="checked"': '' |n %>>
+ <label class="custom-control-label" for="<% $Name %>-no"><&|/l&>No</&></label>
+ </div>
+ </div>
+
+ <div class="col-md-auto">
+ <div class="custom-control custom-radio">
+ <input type="radio" id="<% $Name %>-empty" name="<% $Name %>" class="custom-control-input" value="__empty_value__" <% !defined $CurrentValue? ' checked="checked"': '' |n %>>
+ <label class="custom-control-label" for="<% $Name %>-empty"><% $DefaultLabel %></label>
+ </div>
+ </div>
+</div>
% }
</%METHOD>

diff --git a/share/html/Widgets/Form/Integer b/share/html/Widgets/Form/Integer
index 95066b2a7..fa48d6071 100644
--- a/share/html/Widgets/Form/Integer
+++ b/share/html/Widgets/Form/Integer
@@ -48,13 +48,17 @@
<%DOC>
see docs/extending/using_forms_widgets.pod
</%DOC>
-<div id="form-box-<% lc $Name %>" class="widget">
-<span class="label description"><% $Description %></span>
-<span class="value"><& SELF:InputOnly, %ARGS &></span>
+<div id="form-box-<% lc $Name %>" class="widget form-row">
+ <div class="col-md-3 label">
+ <% $Description // '' %>
+ </div>
+ <div class="col-md-9 value">
+ <& SELF:InputOnly, %ARGS &>
% if ( $Default ) {
-<span class="comment"><% $DefaultLabel %></span>
+ <span class="comment"><% $DefaultLabel %></span>
% }
-<span class="hints"><% $Hints %></span>
+ <span class="hints"><% $Hints %></span>
+ </div>
</div>
<%INIT>
$_ = '' foreach grep !defined, $CurrentValue, $DefaultValue;
@@ -74,7 +78,7 @@ $DefaultLabel => undef
</%ARGS>

<%METHOD InputOnly>
-<input type="text" name="<% $Name %>" value="<% $CurrentValue %>" />\
+<input type="text" name="<% $Name %>" value="<% $CurrentValue %>" class="form-control" />\
<%ARGS>
$Name
$CurrentValue => '',
diff --git a/share/html/Widgets/Form/Select b/share/html/Widgets/Form/Select
index 0649ccf6c..5f8e3e614 100644
--- a/share/html/Widgets/Form/Select
+++ b/share/html/Widgets/Form/Select
@@ -48,12 +48,14 @@
<%DOC>
see docs/extending/using_forms_widgets.pod
</%DOC>
-<div id="form-box-<% lc $Name %>" class="widget">
-% if ( $Description ) {
-<span class="label"><% $Description %></span>
-% }
-<span class="value"><& SELF:InputOnly, %ARGS &></span>
-<span class="hints"><% $Hints %></span>
+<div id="form-box-<% lc $Name %>" class="widget form-row">
+ <div class="col-md-3 label">
+ <% $Description // '' %>
+ </div>
+ <div class="col-md-9 value">
+ <& SELF:InputOnly, %ARGS &>
+ <span class="hints"><% $Hints %></span>
+ </div>
</div>
<%ARGS>
$Name
diff --git a/share/html/Widgets/Form/String b/share/html/Widgets/Form/String
index b83bd6d6a..89da49761 100644
--- a/share/html/Widgets/Form/String
+++ b/share/html/Widgets/Form/String
@@ -48,13 +48,17 @@
<%DOC>
see docs/extending/using_forms_widgets.pod
</%DOC>
-<div id="form-box-<% lc $Name %>" class="widget">
-<span class="description label"><% $Description %></span>
-<span class="value"><& SELF:InputOnly, %ARGS &></span>
+<div id="form-box-<% lc $Name %>" class="widget form-row">
+ <div class="col-md-3 label">
+ <% $Description // '' %>
+ </div>
+ <div class="col-md-9 value">
+ <& SELF:InputOnly, %ARGS &>
% if ( $Default ) {
-<span class="comment"><% $DefaultLabel %></span>
+ <span class="comment"><% $DefaultLabel %></span>
% }
-<span class="hints"><% $Hints %></span>
+ <span class="hints"><% $Hints %></span>
+ </div>
</div>
<%ARGS>
$Name
@@ -70,7 +74,7 @@ $DefaultLabel => loc( 'Default: [_1]', $DefaultValue ),
</%ARGS>

<%METHOD InputOnly>
-<input type="<% $Type %>" name="<% $Name %>" value="<% $CurrentValue || '' %>" />\
+<input type="<% $Type %>" name="<% $Name %>" value="<% $CurrentValue || '' %>" class="form-control" />\
<%ARGS>
$Name
$CurrentValue => '',
diff --git a/share/static/css/base-responsive/forms.css b/share/static/css/base-responsive/forms.css
index 3742f69e7..769c2cd1c 100644
--- a/share/static/css/base-responsive/forms.css
+++ b/share/static/css/base-responsive/forms.css
@@ -218,25 +218,9 @@ div.widget {
clear: both;
}

-div.widget .label {
- text-align: right;
- display: block;
- width: 15em;
- float: left;
- clear: both;
- font-size: 0.9em;
- padding-right: 0.5em;
- white-space: normal;
-}
-
-div.widget .value {
- display: block;
-}
-
div.widget .hints {

display: block;
- padding-left: 14em;
font-style: italic;
}


commit dd9fd6b1a14e4e429fb27d3456f238b6badd8efe
Author: sunnavy <sunnavy@bestpractical.com>
Date: Sat Jul 20 04:52:25 2019 +0800

Migrate /Widgets/SelectionBox to elevator themes

diff --git a/share/html/Widgets/SelectionBox b/share/html/Widgets/SelectionBox
index eb53961af..1f4f1ddc7 100644
--- a/share/html/Widgets/SelectionBox
+++ b/share/html/Widgets/SelectionBox
@@ -167,47 +167,81 @@ $self => undef
<form method="post" action="<%$self->{Action}%>" name="SelectionBox-<% $name %>" id="SelectionBox-<% $name %>">
<input type="hidden" class="hidden" name="<% $self->{Name} %>-Submit" value="1" />
<& SelectionBox:current, self => $self &>
-<&|/l&>Available</&>:
-<br />
-<select name="<%$name%>-Available" id="<%$name%>-Available" size="<%$size%>" multiple="multiple" class="tall selection-box">
+
+<div class="form-row">
+ <div class="col-md-5">
+ <&|/l&>Available</&>:
+ </div>
+</div>
+
+<div class="form-row">
+ <div class="col-md-5">
+ <div class="form-row">
+ <div class="col-md-12">
+ <select name="<%$name%>-Available" id="<%$name%>-Available" size="<%$size%>" multiple="multiple" class="tall selection-box form-control">
% for (@{$self->{Available}}) {
-<option value="<% $_->[0] %>"><% $_->[1] %></option>
+ <option value="<% $_->[0] %>"><% $_->[1] %></option>
% }
-</select>
+ </select>
+ </div>
+ </div>
+ </div>

% unless ($self->{ReadOnly}) {
-<input aria-label="Add" name="add" type="submit" class="button" value=" &rarr; " />
+ <div class="col-md-auto">
+ <div class="form-row">
+ <div class="col-md-12">
+ <input aria-label="Add" name="add" type="submit" class="button btn btn-primary form-control" value=" &rarr; " />
+ </div>
+ </div>
+ </div>
% }

-<select name="<%$name%>-Selected" id="<%$name%>-Selected" size="<%$size%>" multiple="multiple" class="tall selection-box">
+ <div class="col-md-5">
+ <div class="form-row">
+ <div class="col-md-12">
+ <select name="<%$name%>-Selected" id="<%$name%>-Selected" size="<%$size%>" multiple="multiple" class="tall selection-box form-control">
% for (@{$self->{Current}}) {
-<option value="<% $_ %>"
+ <option value="<% $_ %>"
% if (exists $selected{$_}) {
-selected="selected"
+ selected="selected"
% }
-><% $self->{_item_map}{$_} ||'' %></option>
+ ><% $self->{_item_map}{$_} ||'' %></option>
% }
-</select>
+ </select>
+ </div>
+ </div>
+
% unless ($self->{'ReadOnly'}) {
+ <div class="form-row">
+ <div class="col-md-12 text-center">
% unless ($ARGS{'NoArrows'}) {
- <input aria-label="Move up" name="moveup" type="submit" class="button" value=" &uarr; " />
- <input aria-label="Move down" name="movedown" type="submit" class="button" value=" &darr; " />
+ <input aria-label="Move up" name="moveup" type="submit" class="button btn btn-primary form-control" value=" &uarr; " />
+ <input aria-label="Move down" name="movedown" type="submit" class="button btn btn-primary form-control" value=" &darr; " />
% }
- <input name="remove" type="submit" class="button" value="<&|/l&>Delete</&>" />
+ <input name="remove" type="submit" class="button btn btn-primary form-control" value="<&|/l&>Delete</&>" />
% if ($ARGS{'Clear'}) {
- <input name="clear" type="submit" class="button" value="<&|/l&>Clear</&>" />
+ <input name="clear" type="submit" class="button btn btn-primary form-control" value="<&|/l&>Clear</&>" />
% }
% if ( $ARGS{'ShowUpdate'} ) {
- <input name="update" type="submit" class="button" value="<&|/l&>Update</&>" />
+ <input name="update" type="submit" class="button btn btn-primary form-control" value="<&|/l&>Update</&>" />
% }
+ </div>
+ </div>
% }
+ </div>
+</div>

% my $caption = "";
% unless ($self->{'AutoSave'}) {
% if ($self->{Modified}) {
% $caption = loc('Selections modified. Please save your changes');
% }
+<div class="form-row">
+ <div class="col-md-12">
<& /Elements/Submit, Caption => loc($caption), Label => loc('Save'), Name => $name.'-Save' &>
+ </div>
+</div>
% }
</form>


commit 5067106e4f336f6848ba3635119084e10fbd7670
Author: sunnavy <sunnavy@bestpractical.com>
Date: Mon Jul 22 23:11:37 2019 +0800

Fix unbalanced div for Reminders and tweak the UI a bit

diff --git a/share/html/Ticket/Elements/Reminders b/share/html/Ticket/Elements/Reminders
index f30b22943..a0865e9f8 100644
--- a/share/html/Ticket/Elements/Reminders
+++ b/share/html/Ticket/Elements/Reminders
@@ -160,7 +160,7 @@ $Ticket
$Index
</%args>

- <div class="col-md-6 <% $Index%2 ? 'oddline' : 'evenline' %>" id="reminder-<% $Reminder->id %>">
+ <div class="col-md-12 <% $Index%2 ? 'oddline' : 'evenline' %>" id="reminder-<% $Reminder->id %>">
% unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) {
<input class="custom-control-input" name="Complete-Reminder-<% $Reminder->id %>" type="hidden"
value=<% $Reminder->Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 1 : 0 %>
@@ -247,4 +247,5 @@ $Index
<& /Elements/ShowUser, User => $Reminder->OwnerObj &>
</div>
</div>
+</div>
</%method>
diff --git a/share/html/Ticket/Reminders.html b/share/html/Ticket/Reminders.html
index 7dbe2eda5..66e727abc 100644
--- a/share/html/Ticket/Reminders.html
+++ b/share/html/Ticket/Reminders.html
@@ -53,14 +53,18 @@
<& /Elements/ListActions, actions => \@actions &>

<form action="<%RT->Config->Get('WebPath')%>/Ticket/Reminders.html" name="UpdateReminders" id="UpdateReminders" method="post">
-<&|/Widgets/TitleBox, title => loc("Reminders"),
- class=>'ticket-info-reminders'
- &>
-
-<& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 1, Edit => 1, ShowSave => 0 &>
-</&>
-<& /Elements/Submit,
- Label => loc('Save Changes') &>
+ <&|/Widgets/TitleBox, title => loc("Reminders"), class=>'ticket-info-reminders' &>
+ <div class="row">
+ <div class="col-md-6">
+ <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 1, Edit => 1, ShowSave => 0 &>
+ </div>
+ </div>
+ </&>
+ <div class="form-row">
+ <div class="col-md-12">
+ <& /Elements/Submit, Label => loc('Save Changes') &>
+ </div>
+ </div>
</form>



commit 8a96f0bdf9a7f5291849f693c23b28829b17f3fb
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Jul 23 20:23:33 2019 +0800

Migrate our own responding solution to bootstrap

diff --git a/share/html/Elements/AddLinks b/share/html/Elements/AddLinks
index ce5228b86..a7c208cd3 100644
--- a/share/html/Elements/AddLinks
+++ b/share/html/Elements/AddLinks
@@ -70,30 +70,30 @@ $exclude .= qq| data-autocomplete-exclude="$id"| if $Object->id;
% } else {
<i><&|/l&>Enter objects or URIs to link objects to. Separate multiple entries with spaces.</&></i><br />
% }
-<div class="fields">
- <div class="field">
- <span class="label"><& ShowRelationLabel, Object => $Object, Label => loc('Depends on').':', Relation => 'DependsOn' &></span>
- <span class="value entry"><input type="text" class="form-control" name="<%$id%>-DependsOn" value="<% $ARGSRef->{"$id-DependsOn"} || '' %>" <% $exclude |n%>/></span>
+<div>
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Depends on').':', Relation => 'DependsOn' &></div>
+ <div class="value col-md-9"><input type="text" class="form-control" name="<%$id%>-DependsOn" value="<% $ARGSRef->{"$id-DependsOn"} || '' %>" <% $exclude |n%>/></div>
</div>
- <div class="field">
- <span class="label"><& ShowRelationLabel, Object => $Object, Label => loc('Depended on by').':', Relation => 'DependedOnBy' &></span>
- <span class="value entry"><input type="text" class="form-control" name="DependsOn-<%$id%>" value="<% $ARGSRef->{"DependsOn-$id"} || '' %>" <% $exclude |n%>/></span>
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Depended on by').':', Relation => 'DependedOnBy' &></div>
+ <div class="value col-md-9"><input type="text" class="form-control" name="DependsOn-<%$id%>" value="<% $ARGSRef->{"DependsOn-$id"} || '' %>" <% $exclude |n%>/></div>
</div>
- <div class="field">
- <span class="label"><& ShowRelationLabel, Object => $Object, Label => loc('Parents').':', Relation => 'Parents' &></span>
- <span class="value entry"><input type="text" class="form-control" name="<%$id%>-MemberOf" value="<% $ARGSRef->{"$id-MemberOf"} || '' %>" <% $exclude |n%>/></span>
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Parents').':', Relation => 'Parents' &></div>
+ <div class="value col-md-9"><input type="text" class="form-control" name="<%$id%>-MemberOf" value="<% $ARGSRef->{"$id-MemberOf"} || '' %>" <% $exclude |n%>/></div>
</div>
- <div class="field">
- <span class="label"><& ShowRelationLabel, Object => $Object, Label => loc('Children').':', Relation => 'Children' &></span>
- <span class="value entry"> <input type="text" class="form-control" name="MemberOf-<%$id%>" value="<% $ARGSRef->{"MemberOf-$id"} || '' %>" <% $exclude |n%>/></span>
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Children').':', Relation => 'Children' &></div>
+ <div class="value col-md-9"> <input type="text" class="form-control" name="MemberOf-<%$id%>" value="<% $ARGSRef->{"MemberOf-$id"} || '' %>" <% $exclude |n%>/></div>
</div>
- <div class="field">
- <span class="label"><& ShowRelationLabel, Object => $Object, Label => loc('Refers to').':', Relation => 'RefersTo' &></span>
- <span class="value entry"><input type="text" class="form-control" name="<%$id%>-RefersTo" value="<% $ARGSRef->{"$id-RefersTo"} || '' %>" <% $exclude |n%>/></span>
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Refers to').':', Relation => 'RefersTo' &></div>
+ <div class="value col-md-9"><input type="text" class="form-control" name="<%$id%>-RefersTo" value="<% $ARGSRef->{"$id-RefersTo"} || '' %>" <% $exclude |n%>/></div>
</div>
- <div class="field">
- <span class="label"><& ShowRelationLabel, Object => $Object, Label => loc('Referred to by').':', Relation => 'ReferredToBy' &></span>
- <span class="value entry"><input type="text" class="form-control" name="RefersTo-<%$id%>" value="<% $ARGSRef->{"RefersTo-$id"} || '' %>" <% $exclude |n%>/></span>
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Referred to by').':', Relation => 'ReferredToBy' &></div>
+ <div class="value col-md-9"><input type="text" class="form-control" name="RefersTo-<%$id%>" value="<% $ARGSRef->{"RefersTo-$id"} || '' %>" <% $exclude |n%>/></div>
</div>
<& /Elements/EditCustomFields,
Object => $Object,
diff --git a/share/html/Elements/EditCustomFields b/share/html/Elements/EditCustomFields
index 1ff3145bc..6f0c666e7 100644
--- a/share/html/Elements/EditCustomFields
+++ b/share/html/Elements/EditCustomFields
@@ -49,17 +49,17 @@
% Grouping => $Grouping, ARGSRef => \%ARGS, CustomFields => $CustomFields);
% if (@CustomFields) {
% if ( !$InTable ) {
-<div class="fields edit-custom-fields">
+<div class="edit-custom-fields">
% }
% for my $CustomField ( @CustomFields ) {
% my $Type = $CustomField->Type || 'Unknown';

- <div class="field edit-custom-field cftype-<% $Type %>">
- <span class="cflabel">
+ <div class="form-row edit-custom-field cftype-<% $Type %>">
+ <div class="cflabel label col-md-3">
<span class="name"><% $CustomField->Name %>:</span><br />
<span class="type"><% $CustomField->EntryHint // '' %></span>
- </span>
- <span class="entry value">
+ </div>
+ <div class="value col-md-9">
% my $default = $m->notes('Field-' . $CustomField->Id);
% $default ||= $ARGS{"CustomField-". $CustomField->Id };
<& /Elements/EditCustomField,
@@ -77,7 +77,7 @@
<&|/l, $CustomField->FriendlyPattern &>Input must match [_1]</&>
</span>
% }
- </span>
+ </div>
% $m->callback( CallbackName => 'AfterCustomFieldValue', CustomField => $CustomField, Object => $Object, Grouping => $Grouping );
</div>
% }
diff --git a/share/html/Elements/EditLinks b/share/html/Elements/EditLinks
index e49c5bba0..b9c4d4661 100644
--- a/share/html/Elements/EditLinks
+++ b/share/html/Elements/EditLinks
@@ -49,10 +49,10 @@
<div class="boxcontainer col-md-6">
<h3><&|/l&>Current Links</&></h3>

-<div class="wide fields">
- <div class="field">
- <span class="labeltop"><& ShowRelationLabel, Object => $Object, Label => loc('Depends on').':', Relation => 'DependsOn' &></span>
- <span class="value">
+<div class="wide">
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Depends on').':', Relation => 'DependsOn' &></div>
+ <div class="value col-md-9">
<div class="checkboxes list-group list-group-compact">
% while (my $link = $Object->DependsOn->Next) {
<div class="list-group-item">
@@ -60,11 +60,11 @@
</div>
% }
</div>
- </span>
+ </div>
</div>
- <div class="field">
- <span class="labeltop"><& ShowRelationLabel, Object => $Object, Label => loc('Depended on by').':', Relation => 'DependedOnBy' &></span>
- <span class="value">
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Depended on by').':', Relation => 'DependedOnBy' &></div>
+ <div class="value col-md-9">
<div class="checkboxes list-group list-group-compact">
% while (my $link = $Object->DependedOnBy->Next) {
<div class="list-group-item">
@@ -72,11 +72,11 @@
</div>
% }
</div>
- </span>
+ </div>
</div>
- <div class="field">
- <span class="labeltop"><& ShowRelationLabel, Object => $Object, Label => loc('Parents').':', Relation => 'Parents' &></span>
- <span class="value">
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Parents').':', Relation => 'Parents' &></div>
+ <div class="value col-md-9">
<div class="checkboxes list-group list-group-compact">
% while (my $link = $Object->MemberOf->Next) {
<div class="list-group-item">
@@ -84,11 +84,11 @@
</div>
% }
</div>
- </span>
+ </div>
</div>
- <div class="field">
- <span class="labeltop"><& ShowRelationLabel, Object => $Object, Label => loc('Children').':', Relation => 'Children' &></span>
- <span class="value">
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Children').':', Relation => 'Children' &></div>
+ <div class="value col-md-9">
<div class="checkboxes list-group list-group-compact">
% while (my $link = $Object->Members->Next) {
<div class="list-group-item">
@@ -96,11 +96,11 @@
</div>
% }
</div>
- </span>
+ </div>
</div>
- <div class="field">
- <span class="labeltop"><& ShowRelationLabel, Object => $Object, Label => loc('Refers to').':', Relation => 'RefersTo' &></span>
- <span class="value">
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Refers to').':', Relation => 'RefersTo' &></div>
+ <div class="value col-md-9">
<div class="checkboxes list-group list-group-compact">
% while (my $link = $Object->RefersTo->Next) {
<div class="list-group-item">
@@ -108,11 +108,11 @@
</div>
%}
</div>
- </span>
+ </div>
</div>
- <div class="field">
- <span class="labeltop"><& ShowRelationLabel, Object => $Object, Label => loc('Referred to by').':', Relation => 'ReferredToBy' &></span>
- <span class="value">
+ <div class="form-row">
+ <div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Referred to by').':', Relation => 'ReferredToBy' &></div>
+ <div class="value col-md-9">
<div class="checkboxes list-group list-group-compact">
% while (my $link = $Object->ReferredToBy->Next) {
<div class="list-group-item">
@@ -120,11 +120,11 @@
</div>
% }
</div>
- </span>
+ </div>
</div>
- <div class="field">
+ <div class="form-row">
<span class="empty"></span>
- <span class="value"><i><&|/l&>(Check box to delete)</&></i></span>
+ <div class="value col-md-9"><i><&|/l&>(Check box to delete)</&></i></div>
</div>
</div>

diff --git a/share/html/Elements/QuickCreate b/share/html/Elements/QuickCreate
index a8064026a..09a822de4 100644
--- a/share/html/Elements/QuickCreate
+++ b/share/html/Elements/QuickCreate
@@ -53,34 +53,34 @@
% $m->callback(CallbackName => 'InFormElement');
>
<input type="hidden" class="hidden" name="QuickCreate" value="1" />
-<div class="wide fields">
- <div class="field input-row">
- <span class="label"><&|/l&>Subject</&>:</span>
- <span class="value"><input type="text" size="50" class="form-control" name="Subject" value="<% $args->{Subject} || '' %>" /></span>
+<div class="wide">
+ <div class="form-row input-row">
+ <div class="label col-md-3"><&|/l&>Subject</&>:</div>
+ <div class="value col-md-9"><input type="text" size="50" class="form-control" name="Subject" value="<% $args->{Subject} || '' %>" /></div>
</div>
- <div class="field input-row">
- <span class="label"><&|/l&>Queue</&>:</span>
- <span class="value">
+ <div class="form-row input-row">
+ <div class="label col-md-3"><&|/l&>Queue</&>:</div>
+ <div class="value col-md-9">
<& /Elements/SelectNewTicketQueue, Name => 'Queue', Default => $args->{Queue} &>
- </span>
+ </div>
</div>
- <div class="field input-row">
- <span class="label"><&|/l&>Owner</&>:</span>
- <span class="value">
+ <div class="form-row input-row">
+ <div class="label col-md-3"><&|/l&>Owner</&>:</div>
+ <div class="value col-md-9">
<select type="select" name="Owner" class="selectpicker form-control">
% my $default_owner = $args->{Owner} || $session{'CurrentUser'}->id;
<option value="<%$session{'CurrentUser'}->id%>" <% $default_owner == $session{'CurrentUser'}->id ? 'selected="selected"' : '' |n %>><&|/l&>Me</&></option>
<option value="<%RT->Nobody->id%>" <% $default_owner == RT->Nobody->id ? 'selected="selected"' : '' |n %>><%loc('Nobody')%></option>
</select>
- </span>
+ </div>
</div>
- <div class="field input-row">
- <span class="label"><&|/l&>Requestors</&>:</span>
- <span class="value"><& /Elements/EmailInput, Name => 'Requestors', Size => '40', Default => $args->{Requestors} || $session{CurrentUser}->EmailAddress, AutocompleteMultiple => 1 &></span>
+ <div class="form-row input-row">
+ <div class="label col-md-3"><&|/l&>Requestors</&>:</div>
+ <div class="value col-md-9"><& /Elements/EmailInput, Name => 'Requestors', Size => '40', Default => $args->{Requestors} || $session{CurrentUser}->EmailAddress, AutocompleteMultiple => 1 &></div>
</div>
- <div class="field input-row">
- <span class="labeltop"><&|/l&>Content</&>:</span>
- <span class="value"><textarea class="form-control" name="Content" cols="50" rows="3"><% $args->{Content} || ''%></textarea></span>
+ <div class="form-row input-row">
+ <div class="label col-md-3"><&|/l&>Content</&>:</div>
+ <div class="value col-md-9"><textarea class="form-control" name="Content" cols="50" rows="3"><% $args->{Content} || ''%></textarea></div>
</div>
</div>
<& /Elements/Submit, Label => loc('Create') &>
diff --git a/share/html/Elements/ShowCustomFields b/share/html/Elements/ShowCustomFields
index d5dac387b..26ef1e570 100644
--- a/share/html/Elements/ShowCustomFields
+++ b/share/html/Elements/ShowCustomFields
@@ -48,7 +48,7 @@
% $m->callback( CallbackName => 'BeforeCustomFields', Object => $Object,
% Grouping => $Grouping, ARGSRef => \%ARGS, CustomFields => $CustomFields, Table => $Table );
% if ($Table) {
-<div class="fields">
+<div>
% }
% while ( my $CustomField = $CustomFields->Next ) {
% my $Values = $Object->CustomFieldValues( $CustomField->Id );
@@ -65,9 +65,10 @@
% push @classes, 'unset-field' if not $count;
% $m->callback( CallbackName => 'ModifyFieldClasses', CustomField => $CustomField,
% Object => $Object, Classes => \@classes, Grouping => $Grouping );
- <div class="field <% join(' ', @classes) %>" id="CF-<%$CustomField->id%>-ShowRow">
- <span class="label"><% $CustomField->Name %>:</span>
- <span class="value<% $count ? '' : ' no-value' %>">
+ <div class="form-row <% join(' ', @classes) %>" id="CF-<%$CustomField->id%>-ShowRow">
+ <div class="label col-md-3"><% $CustomField->Name %>:</div>
+ <div class="value col-md-9 <% $count ? '' : ' no-value' %>">
+ <span class="form-control current-value">
% unless ( $count ) {
<&|/l&>(no value)</&>
% } elsif ( $count == 1 ) {
@@ -81,7 +82,8 @@
% }
</ul>
% }
- </span>
+ </span>
+ </div>
% $m->callback( CallbackName => 'AfterCustomFieldValue', CustomField => $CustomField,
% Object => $Object, Grouping => $Grouping, Table => $Table );
</div>
diff --git a/share/html/Elements/ShowLinks b/share/html/Elements/ShowLinks
index afdc0f135..de22d2fa7 100644
--- a/share/html/Elements/ShowLinks
+++ b/share/html/Elements/ShowLinks
@@ -45,18 +45,18 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<div class="wide fields">
+<div class="wide">
% for my $type (@display) {
- <div class="field <%$type%><% $clone{$type} || $Object->$type->Count ? q{} : q{ unset-field}%>">
- <span class="labeltop">
+ <div class="form-row <%$type%><% $clone{$type} || $Object->$type->Count ? q{} : q{ unset-field}%>">
+ <div class="label col-md-3">
<& ShowRelationLabel, Object => $Object, Label => $labels{$type}.':', Relation => $type &>
% if ($clone{$type}) {
- <span class="create">(<a href="<% $clone{$type} %>"><% loc('Create') %></a>)</span>
+ <span class="create">(<a href="<% $clone{$type} %>"><% loc('Create') %></a>)</div>
% }
</span>
- <span class="value">
+ <div class="value col-md-9"><span class="form-control current-value">
<& ShowLinksOfType, Object => $Object, Type => $type, Recurse => ($type eq 'Members') &>
- </span>
+ </span></div>
</div>
% }

diff --git a/share/html/Elements/ShowRecord b/share/html/Elements/ShowRecord
index ca6baba92..3351f3b01 100644
--- a/share/html/Elements/ShowRecord
+++ b/share/html/Elements/ShowRecord
@@ -80,7 +80,7 @@ for my $column (@columns) {
}
</%perl>
<div class="record-field <% $Class ? CSSClass("$Class-field") : "" %> <% CSSClass($fetch_columnmap->($attr,'attribute',[$attr],'no_escape')) %>">
-<span class="label"><% loc($title) |n %></span>
+<div class="label col-md-3"><% loc($title) |n %></div>
<%perl>
my @out;
foreach my $subcol ( @{ $column->{output} } ) {
@@ -93,7 +93,7 @@ for my $column (@columns) {
}
@out = grep { defined $_ and length $_ } @out;
</%perl>
-<span class="value"><% join('',@out) |n %></span>
+<div class="value col-md-9"><span class="form-control current-value"><% join('',@out) |n %></span></div>
% $m->callback(CallbackName => 'AfterValue', Object => $Object, attribute => $attr, column => $column );
</div>
% }
diff --git a/share/html/Search/Elements/Chart b/share/html/Search/Elements/Chart
index 6b998a82c..f8d8038c8 100644
--- a/share/html/Search/Elements/Chart
+++ b/share/html/Search/Elements/Chart
@@ -92,7 +92,7 @@ my $query_string = $m->comp('/Elements/QueryString', %ARGS, GroupBy => \@GroupBy
<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 class="query"><div class="label col-md-3"><% loc('Query') %>:</div><div class="value col-md-9"><% $Query %></div></div>
% }
</div>
</div>
diff --git a/share/html/SelfService/Article/Display.html b/share/html/SelfService/Article/Display.html
index dc4cc71ab..4d142f08d 100644
--- a/share/html/SelfService/Article/Display.html
+++ b/share/html/SelfService/Article/Display.html
@@ -46,8 +46,8 @@
%#
%# END BPS TAGGED BLOCK }}}
<& /SelfService/Elements/Header, Title => loc('Display Article [_1]', $id) &>
-<span class="label"><%$article->Name || loc("(no name)")%></span><br />
-<em><span class="value"><%$article->Summary%></span></em>
+<div class="label col-md-3"><%$article->Name || loc("(no name)")%></div><br />
+<em><div class="value col-md-9"><%$article->Summary%></div></em>
<& /Elements/ShowCustomFields, Object => $article &>

<%init>
diff --git a/share/html/SelfService/Create.html b/share/html/SelfService/Create.html
index 39eca31b5..44eb920d5 100644
--- a/share/html/SelfService/Create.html
+++ b/share/html/SelfService/Create.html
@@ -56,40 +56,40 @@
% }

<&|/Widgets/TitleBox, title => $title, class => 'ticket-info-basics' &>
-<div class="fields">
-<div class="field">
-<span class="label">
+<div>
+<div class="form-row">
+<div class="label col-md-3">
<&|/l&>Queue</&>:
-</span>
-<span class="value">
+</div>
+<div class="value col-md-9">
<input type="hidden" class="hidden" name="Queue" value="<%$queue_obj->id || ''%>" />
<strong><%$queue_obj->Name || ''%></strong> <% $queue_obj->Description ? '('.$queue_obj->Description.')' : '' %>
-</span>
+</div>
</div>
<% $m->callback( CallbackName => 'AfterQueue', %ARGS, QueueObj => $queue_obj ) %>
-<div class="field">
-<span class="label">
+<div class="form-row">
+<div class="label col-md-3">
<&|/l&>Requestors</&>:
-</span>
-<span class="value">
+</div>
+<div class="value col-md-9">
<& /Elements/EmailInput, Name => 'Requestors', Size => '20', Default => $ARGS{Requestors} || $session{CurrentUser}->EmailAddress, AutocompleteMultiple => 1 &>
-</span>
</div>
-<div class="field">
-<span class="label">
+</div>
+<div class="form-row">
+<div class="label col-md-3">
<&|/l&>Cc</&>:
-</span>
-<span class="value">
+</div>
+<div class="value col-md-9">
<& /Elements/EmailInput, Name => 'Cc', Size => '20', Default => $ARGS{Cc} || '', AutocompleteMultiple => 1 &>
-</span>
</div>
-<div class="field">
-<span class="label">
+</div>
+<div class="form-row">
+<div class="label col-md-3">
<&|/l&>Subject</&>:
-</span>
-<span class="value">
+</div>
+<div class="value col-md-9">
<input class="form-control" type="text" name="Subject" size="60" maxsize="200" value="<%$ARGS{Subject} || ''%>" />
-</span>
+</div>
</div>
<& /Elements/EditCustomFields,
%ARGS,
diff --git a/share/html/SelfService/Update.html b/share/html/SelfService/Update.html
index 89895f61c..fe49a680f 100644
--- a/share/html/SelfService/Update.html
+++ b/share/html/SelfService/Update.html
@@ -59,25 +59,25 @@

<&|/Widgets/TitleBox, title => $title, class => 'ticket-info-basics' &>

-<div class="fields">
- <div class="field">
- <span class="label">
+<div>
+ <div class="form-row">
+ <div class="label col-md-3">
<&|/l&>Status</&>
- </span>
- <span class="value">
+ </div>
+ <div class="value col-md-9">
<& /Ticket/Elements/SelectStatus,
Name => "Status",
TicketObj => $Ticket,
Default => $DefaultStatus &>
- </span>
+ </div>
</div>
- <div class="field">
- <span class="label">
+ <div class="form-row">
+ <div class="label col-md-3">
<&|/l&>Subject</&>
- </span>
- <span class="value">
+ </div>
+ <div class="value col-md-9">
<input class="form-control" type="text" name="UpdateSubject" size="60" value="<% $ARGS{UpdateSubject} || $Ticket->Subject || '' %>" />
- </span>
+ </div>

</div>
<& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $Ticket &>
diff --git a/share/html/Ticket/Create.html b/share/html/Ticket/Create.html
index ebc2d194c..edb59d64f 100644
--- a/share/html/Ticket/Create.html
+++ b/share/html/Ticket/Create.html
@@ -69,7 +69,7 @@
<div id="ticket-create-metadata">
<&| /Widgets/TitleBox, title => loc("Basics"), class=>'ticket-info-basics' &>
<input type="hidden" class="hidden" name="Queue" value="<% $QueueObj->Id %>" />
- <div class="fields">
+ <div>
<& /Ticket/Elements/EditBasics,
InTable => 1,
QueueObj => $QueueObj,
@@ -142,23 +142,23 @@

<div id="ticket-create-message">
<&| /Widgets/TitleBox, title => $title, class => 'messagedetails' &>
-<div class="fields">
+<div>
% $m->callback(CallbackName => 'BeforeRequestors', QueueObj => $QueueObj, ARGSRef => \%ARGS);

-<div class="field">
-<span class="label"><&|/l&>Requestors</&>:</span>
-<span class="value">
+<div class="form-row">
+<div class="label col-md-3"><&|/l&>Requestors</&>:</div>
+<div class="value col-md-9">
<& /Elements/EmailInput, Name => 'Requestors', Size => undef, Default => $ARGS{Requestors} // $session{CurrentUser}->EmailAddress, AutocompleteMultiple => 1 &>
% $m->callback( CallbackName => 'AfterRequestors', QueueObj => $QueueObj, ARGSRef => \%ARGS );
-</span>
+</div>
</div>

-<div class="field">
-<span class="label"><&|/l&>Cc</&>:</span>
-<span class="value"><& /Elements/EmailInput, Name => 'Cc', Size => undef, Default => $ARGS{Cc}, AutocompleteMultiple => 1 &></span>
+<div class="form-row">
+<div class="label col-md-3"><&|/l&>Cc</&>:</div>
+<div class="value col-md-9"><& /Elements/EmailInput, Name => 'Cc', Size => undef, Default => $ARGS{Cc}, AutocompleteMultiple => 1 &></div>
</div>

-<div class="field">
+<div class="form-row">
<span class="label empty">&nbsp;</span>
<span class="comment">
<i><font size="-2">
@@ -167,12 +167,12 @@
</span>
</div>

-<div class="field">
-<span class="label"><&|/l&>Admin Cc</&>:</span>
-<span class="value"><& /Elements/EmailInput, Name => 'AdminCc', Size => undef, Default => $ARGS{AdminCc}, AutocompleteMultiple => 1 &></span>
+<div class="form-row">
+<div class="label col-md-3"><&|/l&>Admin Cc</&>:</div>
+<div class="value col-md-9"><& /Elements/EmailInput, Name => 'AdminCc', Size => undef, Default => $ARGS{AdminCc}, AutocompleteMultiple => 1 &></div>
</div>

-<div class="field">
+<div class="form-row">
<span class="label empty">&nbsp;</span>
<span class="comment">
<i><font size="-2">
@@ -185,13 +185,13 @@
% $roles->LimitToMultipleValue;
% $m->callback( CallbackName => 'ModifyCustomRoles', ARGSRef => \%ARGS, CustomRoles => $roles );
% while (my $role = $roles->Next) {
-<div class="field">
-<span class="label"><% $role->Name %>:</span>
-<span class="value"><& /Elements/EmailInput, Name => $role->GroupType, Size => undef, Default => $ARGS{$role->GroupType}, AutocompleteMultiple => 1 &></span>
+<div class="form-row">
+<div class="label col-md-3"><% $role->Name %>:</div>
+<div class="value col-md-9"><& /Elements/EmailInput, Name => $role->GroupType, Size => undef, Default => $ARGS{$role->GroupType}, AutocompleteMultiple => 1 &></div>
</div>

% if ($role->EntryHint) {
-<div class="field">
+<div class="form-row">
<span class="label empty">&nbsp;</span>
<span class="comment" colspan="5">
<i><font size="-2">
@@ -211,26 +211,26 @@
ForCreation => 1,
&>

-<div class="field">
-<span class="label">
+<div class="form-row">
+<div class="label col-md-3">
<&|/l&>Subject</&>:
-</span>
-<span class="value">
+</div>
+<div class="value col-md-9">
<input class="form-control" type="text" name="Subject" maxsize="200" value="<%$ARGS{Subject} || ''%>" />
% $m->callback( %ARGS, CallbackName => 'AfterSubject' );
-</span>
+</div>
</div>

% if ( $gnupg_widget ) {
-<div class="field">
+<div class="form-row">
<span class="label empty">&nbsp;</span>
-<span class="value"><& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, QueueObj => $QueueObj &></span>
+<div class="value col-md-9"><& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, QueueObj => $QueueObj &></div>
</div>
% }

-<div class="field">
-<span class="label"><&|/l&>Message</&>:</span>
-<span class="value">
+<div class="form-row">
+<div class="label col-md-3"><&|/l&>Message</&>:</div>
+<div class="value col-md-9">
% if ( RT->Config->Get('ArticleOnTicketCreate')) {
<& /Articles/Elements/BeforeMessageBox, %ARGS, QueueObj => $QueueObj &>
% }
@@ -241,7 +241,7 @@
<& /Elements/MessageBox, QuoteTransaction => $QuoteTransaction &>
%}
% $m->callback( %ARGS, QueueObj => $QueueObj, CallbackName => 'AfterMessageBox' );
-</span>
+</div>
</div>

<& /Ticket/Elements/AddAttachments, %ARGS, QueueObj => $QueueObj &>
@@ -259,37 +259,37 @@
<&| /Widgets/TitleBox, title => loc('The Basics'),
title_class=> 'inverse',
color => "#993333" &>
-<div class="fields">
+<div>

-<div class="field">
- <span class="label"><&|/l&>Priority</&>:</span>
- <span class="value"><& /Elements/SelectPriority,
+<div class="form-row">
+ <div class="label col-md-3"><&|/l&>Priority</&>:</div>
+ <div class="value col-md-9"><& /Elements/SelectPriority,
Name => "InitialPriority",
Default => $ARGS{InitialPriority} ? $ARGS{InitialPriority} : $QueueObj->DefaultValue('InitialPriority'),
- &></span>
+ &></div>
</div>

-<div class="field">
- <span class="label"><&|/l&>Final Priority</&>:</span>
- <span class="value"><& /Elements/SelectPriority,
+<div class="form-row">
+ <div class="label col-md-3"><&|/l&>Final Priority</&>:</div>
+ <div class="value col-md-9"><& /Elements/SelectPriority,
Name => "FinalPriority",
Default => $ARGS{FinalPriority} ? $ARGS{FinalPriority} : $QueueObj->DefaultValue('FinalPriority'),
- &></span>
+ &></div>
</div>

-<div class="field">
- <span class="label"><&|/l&>Time Estimated</&>:</span>
- <span class="value"><& /Elements/EditTimeValue, Name => 'TimeEstimated', Default => $ARGS{TimeEstimated} || '' &></span>
+<div class="form-row">
+ <div class="label col-md-3"><&|/l&>Time Estimated</&>:</div>
+ <div class="value col-md-9"><& /Elements/EditTimeValue, Name => 'TimeEstimated', Default => $ARGS{TimeEstimated} || '' &></div>
</div>

-<div class="field">
- <span class="label"><&|/l&>Time Worked</&>:</span>
- <span class="value"><& /Elements/EditTimeValue, Name => 'TimeWorked', Default => $ARGS{TimeWorked} || '' &></span>
+<div class="form-row">
+ <div class="label col-md-3"><&|/l&>Time Worked</&>:</div>
+ <div class="value col-md-9"><& /Elements/EditTimeValue, Name => 'TimeWorked', Default => $ARGS{TimeWorked} || '' &></div>
</div>

-<div class="field">
- <span class="label"><&|/l&>Time Left</&>:</span>
- <span class="value"><& /Elements/EditTimeValue, Name => 'TimeLeft', Default => $ARGS{TimeLeft} || '' &></span>
+<div class="form-row">
+ <div class="label col-md-3"><&|/l&>Time Left</&>:</div>
+ <div class="value col-md-9"><& /Elements/EditTimeValue, Name => 'TimeLeft', Default => $ARGS{TimeLeft} || '' &></div>
</div>
</div>
</&>
@@ -299,13 +299,13 @@
title_class=> 'inverse',
color => "#663366" &>

-<div class="fields">
-<div class="field">
- <span class="label"><&|/l&>Starts</&>:</span>
- <span class="value"><& /Elements/SelectDate, Name => "Starts", Default => $ARGS{Starts} || $QueueObj->DefaultValue('Starts') || '' &></span>
+<div>
+<div class="form-row">
+ <div class="label col-md-3"><&|/l&>Starts</&>:</div>
+ <div class="value col-md-9"><& /Elements/SelectDate, Name => "Starts", Default => $ARGS{Starts} || $QueueObj->DefaultValue('Starts') || '' &></div>
</div>
-<div class="field">
- <span class="label"><&|/l&>Due</&>:</span>
+<div class="form-row">
+ <div class="label col-md-3"><&|/l&>Due</&>:</div>
<span><& /Elements/SelectDate, Name => "Due", Default => $ARGS{Due} || $QueueObj->DefaultValue('Due') || '' &></span>
</div>
<& /Elements/EditCustomFields,
diff --git a/share/html/Ticket/Elements/AddAttachments b/share/html/Ticket/Elements/AddAttachments
index 320e891a5..359236a33 100644
--- a/share/html/Ticket/Elements/AddAttachments
+++ b/share/html/Ticket/Elements/AddAttachments
@@ -46,8 +46,8 @@
%#
%# END BPS TAGGED BLOCK }}}
% if ( $attachments ) {
-<div class="field attachment"><span class="label"><&|/l&>Attached file</&>:</span>
-<span class="value">
+<div class="form-row attachment"><div class="label col-md-3"><&|/l&>Attached file</&>:</div>
+<div class="value col-md-9">
% foreach my $attach_name ( sort keys %$attachments ) {
<div>
<label for="DeleteAttach-<%$attach_name%>"><% $attach_name %></label>
@@ -55,12 +55,12 @@
(<a href="#" class="delete-attach" data-name="<%$attach_name%>" /><&|/l&>Delete</&></a>)
</div>
% } # end of foreach
-</span>
+</div>
</div>
% } # end of if

-<div class="field"><span class="label"><&|/l&>Attach</&>:</span>
- <span class="value">
+<div class="form-row"><div class="label col-md-3"><&|/l&>Attach</&>:</div>
+ <div class="value col-md-9">
<div class="dropzone" id="attach-dropzone">
</div>
<script type="text/javascript">
@@ -170,12 +170,12 @@ jQuery( function() {
</label>
</div>
</div>
- </span>
+ </div>
</div>
% if ($HasExisting) {
-<div class="field">
- <span class="label" valign="top"><&|/l&>Include attachments</&>:</span>
- <span class="value" id="reuse-attachments">
+<div class="form-row">
+ <div class="label col-md-3"><&|/l&>Include attachments</&>:</div>
+ <div class="value col-md-9" id="reuse-attachments">
<& /Ticket/Elements/ShowAttachments,
Ticket => $TicketObj,
Selectable => 1,
@@ -183,7 +183,7 @@ jQuery( function() {
Checked => \@AttachExisting,
Count => RT->Config->Get('AttachmentListCount'),
&>
- </span>
+ </div>
</div>
% }
% $m->callback( %ARGS, CallbackName => 'End' );
diff --git a/share/html/Ticket/Elements/EditBasics b/share/html/Ticket/Elements/EditBasics
index 4d7d76db6..56171cd43 100644
--- a/share/html/Ticket/Elements/EditBasics
+++ b/share/html/Ticket/Elements/EditBasics
@@ -170,13 +170,13 @@ for my $field (@fields) {
</%INIT>

% unless ($InTable) {
-<div class="fields">
+<div>
% }
% for my $field (@fields) {
- <div class="field <% lc $field->{'name'} %>">\
-<span class="label"><% loc($field->{'name'}) %>:</span>\
-<span class="value"><% $field->{'html'} |n %></span>\
-</div>
+ <div class="form-row">
+ <div class="label col-md-3"><% loc($field->{'name'}) %>:</div>
+ <div class="value col-md-9"><% $field->{'html'} |n %></div>
+ </div>
% }
% $m->callback( CallbackName => 'EndOfList', TicketObj => $TicketObj, %ARGS, Fields => \@fields );
% unless ($InTable) {
diff --git a/share/html/Ticket/Elements/EditDates b/share/html/Ticket/Elements/EditDates
index 9193be334..887eb855a 100644
--- a/share/html/Ticket/Elements/EditDates
+++ b/share/html/Ticket/Elements/EditDates
@@ -45,10 +45,10 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<div class="fields">
- <div class="field">
- <span class="label"><&|/l&>Starts</&>:</span>
- <span class="value entry">
+<div>
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>Starts</&>:</div>
+ <div class="value col-md-9">
<div class="form-row">
<div class="col-auto">
<& /Elements/SelectDate,
@@ -60,14 +60,14 @@
&>
</div>
<div class="col-auto">
- <span class="current-value form-control">(<% $TicketObj->StartsObj->AsString %>)</span>
+ <span class="current-value form-control">(<% $TicketObj->StartsObj->AsString %>)</div>
</div>
</div>
</span>
</div>
- <div class="field">
- <span class="label"><&|/l&>Started</&>:</span>
- <span class="value entry">
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>Started</&>:</div>
+ <div class="value col-md-9">
<div class="form-row">
<div class="col-auto">
<& /Elements/SelectDate,
@@ -79,17 +79,17 @@
&>
</div>
<div class="col-auto">
- <span class="current-value form-control">(<%$TicketObj->StartedObj->AsString %>)</span>
+ <span class="current-value form-control">(<%$TicketObj->StartedObj->AsString %>)</div>
</div>
</div>
</span>
</div>

- <div class="field">
- <span class="label">
+ <div class="form-row">
+ <div class="label col-md-3">
<&|/l&>Last Contact</&>:
- </span>
- <span class="value entry">
+ </div>
+ <div class="value col-md-9">
<div class="form-row">
<div class="col-auto">
<& /Elements/SelectDate,
@@ -101,14 +101,14 @@
&>
</div>
<div class="col-auto">
- <span class="current-value form-control">(<% $TicketObj->ToldObj->AsString %>)</span>
+ <span class="current-value form-control">(<% $TicketObj->ToldObj->AsString %>)</div>
</div>
</div>
</span>
</div>
- <div class="field">
- <span class="label"><&|/l&>Due</&>:</span>
- <span class="value entry">
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>Due</&>:</div>
+ <div class="value col-md-9">
<div class="form-row">
<div class="col-auto">
<& /Elements/SelectDate,
@@ -120,7 +120,7 @@
&>
</div>
<div class="col-auto">
- <span class="current-value form-control">(<% $TicketObj->DueObj->AsString %>)</span>
+ <span class="current-value form-control">(<% $TicketObj->DueObj->AsString %>)</div>
</div>
</div>
</span>
diff --git a/share/html/Ticket/Elements/EditMerge b/share/html/Ticket/Elements/EditMerge
index 0c74f2230..99290bd9f 100644
--- a/share/html/Ticket/Elements/EditMerge
+++ b/share/html/Ticket/Elements/EditMerge
@@ -49,10 +49,10 @@
<&|/l&>Warning: merging is a non-reversible action! Enter a single ticket number to be merged into.</&>
</i>

-<div class="fields">
- <div class="field">
- <span class="label"><&|/l&>Merge into</&>:</span>
- <span class="value entry"><input type="text" class="form-control" name="<% $Name %>" value="<% $Default || '' %>" data-autocomplete="Tickets" data-autocomplete-exclude="<% join( ' ', @excludes) || '' %>" /></span>
+<div>
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>Merge into</&>:</div>
+ <div class="value col-md-9"><input type="text" class="form-control" name="<% $Name %>" value="<% $Default || '' %>" data-autocomplete="Tickets" data-autocomplete-exclude="<% join( ' ', @excludes) || '' %>" /></div>
</div>
</div>

diff --git a/share/html/Ticket/Elements/EditTransactionCustomFields b/share/html/Ticket/Elements/EditTransactionCustomFields
index b4d78bef6..474101d57 100644
--- a/share/html/Ticket/Elements/EditTransactionCustomFields
+++ b/share/html/Ticket/Elements/EditTransactionCustomFields
@@ -47,17 +47,17 @@
%# END BPS TAGGED BLOCK }}}
% $m->callback( CallbackName => 'BeforeTransactionCustomFields', TicketObj => $TicketObj, QueueObj => $QueueObj, InTable => $InTable );
% if ( !$InTable ) {
-<div class="edit-transaction-custom-fields fields">
+<div class="edit-transaction-custom-fields">
% }
% if ($CustomFields->Count) {
% while (my $CF = $CustomFields->Next()) {
% next unless $CF->CurrentUserHasRight('ModifyCustomField');
-<div class="field">
-<span class="label cflabel">
+<div class="form-row">
+<div class="label cflabel col-md-3">
<span class="name"><% $CF->Name %>:</span><br />
<span class="type"><% $CF->EntryHint // '' %></span>
-</span>
-<span class="value entry">
+</div>
+<div class="value col-md-9">
<& /Elements/EditCustomField,
%ARGS,
CustomField => $CF,
@@ -67,7 +67,7 @@
<br />
<span class="cfinvalidfield"><% $msg %></span>
% }
-</span>
+</div>
</div>
% }
% }
diff --git a/share/html/Ticket/Elements/Reminders b/share/html/Ticket/Elements/Reminders
index a0865e9f8..945c44e76 100644
--- a/share/html/Ticket/Elements/Reminders
+++ b/share/html/Ticket/Elements/Reminders
@@ -137,19 +137,33 @@ my $reminder_collection = $count_reminders->Collection;
<%args>
$Ticket
</%args>
-<div class="fields">
- <&|/l&>New reminder:</&>
- <div class="field">
- <span class="label"><&|/l&>Subject</&>:</span>
- <span class="entry" colspan="3"><input type="text" class="form-control reminder-subject" name="NewReminder-Subject" id="NewReminder-Subject" /></span>
- </div>
- <div class="field">
- <span class="label"><&|/l&>Owner</&>:</span>
- <span class="entry"><& /Elements/SelectOwner, Name => 'NewReminder-Owner', QueueObj => $Ticket->QueueObj, Default=>$session{'CurrentUser'}->id, DefaultValue => 0 &></span>
- </div>
- <div class="field">
- <span class="label"><&|/l&>Due</&>:</span>
- <span class="entry"><& /Elements/SelectDate, Name => "NewReminder-Due", Default => "" &></span>
+<div class="form-row">
+ <div class="col-md-12">
+ <&|/l&>New reminder:</&>
+ <div class="form-row">
+ <div class="label col-md-3">
+ <&|/l&>Subject</&>:
+ </div>
+ <div class="value col-md-9">
+ <input type="text" class="form-control reminder-subject" name="NewReminder-Subject" id="NewReminder-Subject" />
+ </div>
+ </div>
+ <div class="form-row">
+ <div class="label col-md-3">
+ <&|/l&>Owner</&>:
+ </div>
+ <div class="value col-md-9">
+ <& /Elements/SelectOwner, Name => 'NewReminder-Owner', QueueObj => $Ticket->QueueObj, Default=>$session{'CurrentUser'}->id, DefaultValue => 0 &>
+ </div>
+ </div>
+ <div class="form-row">
+ <div class="label col-md-3">
+ <&|/l&>Due</&>:
+ </div>
+ <div class="value col-md-9">
+ <& /Elements/SelectDate, Name => "NewReminder-Due", Default => "" &>
+ </div>
+ </div>
</div>
</div>
</%method>
diff --git a/share/html/Ticket/Elements/ShowAssets b/share/html/Ticket/Elements/ShowAssets
index 65a8403b6..0a380ce87 100644
--- a/share/html/Ticket/Elements/ShowAssets
+++ b/share/html/Ticket/Elements/ShowAssets
@@ -179,11 +179,11 @@ if ($ShowRelatedTickets) {
. $m->comp("/Elements/QueryString", %search);
</%perl>
<div class="related-tickets">
- <span class="label">
+ <div class="label col-md-3">
<a href="<% $url %>">
<&|/l, $ShowRelatedTickets &>[_1] most recently updated related tickets</&>
</a>
- </span>
+ </div>
<& /Elements/CollectionList,
%search,
Class => "RT::Tickets",
diff --git a/share/html/Ticket/Elements/ShowBasics b/share/html/Ticket/Elements/ShowBasics
index a66dce042..36206a6e4 100644
--- a/share/html/Ticket/Elements/ShowBasics
+++ b/share/html/Ticket/Elements/ShowBasics
@@ -45,72 +45,76 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<div class="fields">
- <div class="id field">
- <span class="label"><&|/l&>Id</&>:</span>
- <span class="value"><%$Ticket->Id %></span>
+<div>
+ <div class="id form-row">
+ <div class="label col-md-3"><&|/l&>Id</&>:</div>
+ <div class="value col-md-9"><span class="current-value form-control"><%$Ticket->Id %></span></div>
</div>
- <div class="status field">
- <span class="label"><&|/l&>Status</&>:</span>
- <span class="value"><% loc($Ticket->Status) %></span>
+ <div class="status form-row">
+ <div class="label col-md-3"><&|/l&>Status</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><% loc($Ticket->Status) %></span></div>
</div>
% if ( !$Ticket->QueueObj->SLADisabled ) {
- <div class="sla field">
- <span class="label"><&|/l&>SLA</&>:</span>
- <span class="value"><% loc($Ticket->SLA) %></span>
+ <div class="sla form-row">
+ <div class="label col-md-3"><&|/l&>SLA</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><% loc($Ticket->SLA) %></span></div>
</div>
% }
% my $totalTimeWorked = 0;
% if (RT->Config->Get('DisplayTotalTimeWorked') && ($totalTimeWorked = $Ticket->TotalTimeWorked)) {
- <div class="total time worked sum field">
- <span class="label"><&|/l&>Total Time Worked</&>:</span>
- <span class="value"><& ShowTime, minutes => $totalTimeWorked &></span>
+ <div class="total time worked sum form-row">
+ <div class="label col-md-3"><&|/l&>Total Time Worked</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowTime, minutes => $totalTimeWorked &></span></div>
</div>
% }
% if ($show_time_worked) {
% if ($Ticket->TimeEstimated) {
- <div class="time estimated field">
- <span class="label"><&|/l&>Estimated</&>:</span>
- <span class="value"><& ShowTime, minutes => $Ticket->TimeEstimated &></span>
+ <div class="time estimated form-row">
+ <div class="label col-md-3"><&|/l&>Estimated</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowTime, minutes => $Ticket->TimeEstimated &></span></div>
</div>
% }
% $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>
+ <div class="time worked sum form-row">
+ <div class="label col-md-3"><&|/l&>Worked</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowTime, minutes => $Ticket->TimeWorked &></span></div>
</div>
% }
% if ( keys %$time_worked ) {
-<div class="time worked by-user field">
- <span class="label"><&|/l&>Users</&>:</span>
- <span>
+<div class="time worked by-user form-row">
+ <div class="label col-md-3"><&|/l&>Users</&>:</div>
+ <div class="value col-md-9">
+ <span class="form-control current-value">
% for my $user ( keys %$time_worked ) {
- <div class="value"><% $user %>:</div>
- <div class="value"><& /Ticket/Elements/ShowTime, minutes => $time_worked->{$user} &></div>
+ <div>
+ <span class="value"><% $user %>:</span>
+ <span class="value"><& /Ticket/Elements/ShowTime, minutes => $time_worked->{$user} &></span>
+ </div>
% }
- </span>
+ </span>
+ </div>
</div>
% }
% $m->callback( %ARGS, CallbackName => 'AfterTimeWorked', TicketObj => $Ticket );
% if ($Ticket->TimeLeft) {
- <div class="time left field">
- <span class="label"><&|/l&>Left</&>:</span>
- <span class="value"><& ShowTime, minutes => $Ticket->TimeLeft &></span>
+ <div class="time left form-row">
+ <div class="label col-md-3"><&|/l&>Left</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowTime, minutes => $Ticket->TimeLeft &></span></div>
</div>
% }
% }
% $m->callback( %ARGS, CallbackName => 'AfterTimeLeft', TicketObj => $Ticket );
- <div class="priority field">
- <span class="label"><&|/l&>Priority</&>:</span>
- <span class="value"><& ShowPriority, Ticket => $Ticket &></span>
+ <div class="priority form-row">
+ <div class="label col-md-3"><&|/l&>Priority</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowPriority, Ticket => $Ticket &></span></div>
</div>
% $m->callback( %ARGS, CallbackName => 'AfterPriority', TicketObj => $Ticket );
%# This will check SeeQueue at the ticket role level, queue level, and global level
% if ($Ticket->CurrentUserHasRight('SeeQueue')) {
- <div class="queue field">
- <span class="label"><&|/l&>Queue</&>:</span>
- <span class="value"><& ShowQueue, Ticket => $Ticket, QueueObj => $Ticket->QueueObj &></span>
+ <div class="queue form-row">
+ <div class="label col-md-3"><&|/l&>Queue</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowQueue, Ticket => $Ticket, QueueObj => $Ticket->QueueObj &></span></div>
</div>
% }
% $m->callback( %ARGS, CallbackName => 'AfterQueue', TicketObj => $Ticket );
diff --git a/share/html/Ticket/Elements/ShowDates b/share/html/Ticket/Elements/ShowDates
index ddd2ef70e..7f9dc7ddd 100644
--- a/share/html/Ticket/Elements/ShowDates
+++ b/share/html/Ticket/Elements/ShowDates
@@ -45,57 +45,57 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<div class="fields">
- <div class="date field created">
- <span class="label"><&|/l&>Created</&>:</span>\
- <span class="value"><% $Ticket->CreatedObj->AsString %></span>
+<div>
+ <div class="date form-row created">
+ <div class="label col-md-3"><&|/l&>Created</&>:</div>\
+ <div class="value col-md-9"><span class="form-control current-value"><% $Ticket->CreatedObj->AsString %></span></div>
</div>
% $m->callback( %ARGS, CallbackName => 'AfterCreated', TicketObj => $Ticket );
- <div class="date field starts<% $Ticket->StartsObj->Unix ? q{} : q{ unset-field}%>">
- <span class="label"><&|/l&>Starts</&>:</span>\
- <span class="value"><% $Ticket->StartsObj->AsString %></span>
+ <div class="date form-row starts<% $Ticket->StartsObj->Unix ? q{} : q{ unset-field}%>">
+ <div class="label col-md-3"><&|/l&>Starts</&>:</div>\
+ <div class="value col-md-9"><span class="form-control current-value"><% $Ticket->StartsObj->AsString %></span></div>
</div>
% $m->callback( %ARGS, CallbackName => 'AfterStarts', TicketObj => $Ticket );
- <div class="date field started<% $Ticket->StartedObj->Unix ? q{} : q{ unset-field}%>">
- <span class="label"><&|/l&>Started</&>:</span>\
- <span class="value"><% $Ticket->StartedObj->AsString %></span>
+ <div class="date form-row started<% $Ticket->StartedObj->Unix ? q{} : q{ unset-field}%>">
+ <div class="label col-md-3"><&|/l&>Started</&>:</div>\
+ <div class="value col-md-9"><span class="form-control current-value"><% $Ticket->StartedObj->AsString %></span></div>
</div>
% $m->callback( %ARGS, CallbackName => 'AfterStarted', TicketObj => $Ticket );
- <div class="date field told<% $Ticket->ToldObj->Unix || $Ticket->CurrentUserHasRight('ModifyTicket') ? q{} : q{ unset-field}%>">
- <span class="label">
+ <div class="date form-row told<% $Ticket->ToldObj->Unix || $Ticket->CurrentUserHasRight('ModifyTicket') ? q{} : q{ unset-field}%>">
+ <div class="label col-md-3">
% if ( $Ticket->CurrentUserHasRight('ModifyTicket' ) ) {
<a href="<% RT->Config->Get('WebPath') %>/Ticket/Display.html?id=<% $Ticket->id %>&Action=SetTold"><&|/l&>Last Contact</&></a>:
% } else {
<&|/l&>Last Contact</&>:
% }
-</span><span class="value"><% $Ticket->ToldObj->AsString %></span>
+</div><div class="value col-md-9"><span class="form-control current-value"><% $Ticket->ToldObj->AsString %></span></div>
</div>
% $m->callback( %ARGS, CallbackName => 'AfterTold', TicketObj => $Ticket );

- <div class="date field due<% $Ticket->DueObj->Unix ? q{} : q{ unset-field}%>">
- <span class="label"><&|/l&>Due</&>:</span>\
+ <div class="date form-row due<% $Ticket->DueObj->Unix ? q{} : q{ unset-field}%>">
+ <div class="label col-md-3"><&|/l&>Due</&>:</div>\
% my $due = $Ticket->DueObj;
% if ( $due && $due->IsSet && $due->Diff < 0 && $Ticket->QueueObj->IsActiveStatus($Ticket->Status) ) {
- <span class="value"><span class="overdue"><% $due->AsString %></span></span>
+ <div class="value col-md-9"><span class="form-control current-value"><span class="overdue"><% $due->AsString %></span></div></span>
% } else {
- <span class="value"><% $due->AsString %></span>
+ <div class="value col-md-9"><span class="form-control current-value"><% $due->AsString %></span></div>
% }
</div>
% $m->callback( %ARGS, CallbackName => 'AfterDue', TicketObj => $Ticket );

- <div class="date field resolved<% $Ticket->ResolvedObj->Unix ? q{} : q{ unset-field}%>">
- <span class="label"><&|/l&>Closed</&>:</span>\
- <span class="value"><% $Ticket->ResolvedObj->AsString %></span>
+ <div class="date form-row resolved<% $Ticket->ResolvedObj->Unix ? q{} : q{ unset-field}%>">
+ <div class="label col-md-3"><&|/l&>Closed</&>:</div>\
+ <div class="value col-md-9"><span class="form-control current-value"><% $Ticket->ResolvedObj->AsString %></span></div>
</div>
% $m->callback( %ARGS, CallbackName => 'AfterResolved', TicketObj => $Ticket );

- <div class="date field updated">
- <span class="label"><&|/l&>Updated</&>:</span>\
+ <div class="date form-row updated">
+ <div class="label col-md-3"><&|/l&>Updated</&>:</div>\
% my $UpdatedString = $Ticket->LastUpdated ? loc("[_1] by [_2]", $Ticket->LastUpdatedAsString, $m->scomp('/Elements/ShowUser', User => $Ticket->LastUpdatedByObj)) : loc("Never");
% if ($UpdatedLink) {
- <span class="value"><a href="<% $UpdatedLink %>"><% $UpdatedString | n %></a></span>
+ <div class="value col-md-9"><span class="form-control current-value"><a href="<% $UpdatedLink %>"><% $UpdatedString | n %></a></span></div>
% } else {
- <span class="value"><% $UpdatedString | n %></span>
+ <div class="value col-md-9"><span class="form-control current-value"><% $UpdatedString | n %></span></div>
% }
</div>
% $m->callback( %ARGS, CallbackName => 'AfterUpdated', TicketObj => $Ticket );
diff --git a/share/html/Ticket/Elements/ShowPeople b/share/html/Ticket/Elements/ShowPeople
index d7c4df79f..97a033ba6 100644
--- a/share/html/Ticket/Elements/ShowPeople
+++ b/share/html/Ticket/Elements/ShowPeople
@@ -45,14 +45,14 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<div class="fields">
- <div class="field owner">
- <span class="label"><&|/l&>Owner</&>:</span>
+<div>
+ <div class="form-row owner">
+ <div class="label col-md-3"><&|/l&>Owner</&>:</div>
% my $owner = $Ticket->OwnerObj;
- <span class="value"><& /Elements/ShowUser, User => $owner, Ticket => $Ticket &>
+ <div class="value col-md-9"><span class="form-control current-value"><& /Elements/ShowUser, User => $owner, Ticket => $Ticket &>
<& /Elements/ShowUserEmailFrequency, User => $owner, Ticket => $Ticket &>
% $m->callback( User => $owner, Ticket => $Ticket, %ARGS, CallbackName => 'AboutThisUser' );
- </span>
+ </span></div>
</div>

% my $single_roles = $Ticket->QueueObj->CustomRoles;
@@ -67,32 +67,32 @@
%# so fall back to nobody

% my $user = $users->First || RT->Nobody;
- <div class="field">
- <span class="label"><% $role->Name %>:</span>
- <span class="value"><& /Elements/ShowUser, User => $user, Ticket => $Ticket &></span>
+ <div class="form-row">
+ <div class="label col-md-3"><% $role->Name %>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& /Elements/ShowUser, User => $user, Ticket => $Ticket &></span></div>
</div>
% }

- <div class="field requestors">
- <span class="labeltop"><&|/l&>Requestors</&>:</span>
- <span class="value"><& ShowGroupMembers, Group => $Ticket->Requestors, Ticket => $Ticket &></span>
+ <div class="form-row requestors">
+ <div class="label col-md-3"><&|/l&>Requestors</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowGroupMembers, Group => $Ticket->Requestors, Ticket => $Ticket &></span></div>
</div>
- <div class="field cc<% $Ticket->Cc->MembersObj->Count ? q{} : q{ unset-field}%>">
- <span class="labeltop"><&|/l&>Cc</&>:</span>
- <span class="value"><& ShowGroupMembers, Group => $Ticket->Cc, Ticket => $Ticket &></span>
+ <div class="form-row cc<% $Ticket->Cc->MembersObj->Count ? q{} : q{ unset-field}%>">
+ <div class="label col-md-3"><&|/l&>Cc</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowGroupMembers, Group => $Ticket->Cc, Ticket => $Ticket &></span></div>
</div>
- <div class="field admincc<% $Ticket->AdminCc->MembersObj->Count ? q{} : q{ unset-field}%>">
- <span class="labeltop"><&|/l&>AdminCc</&>:</span>
- <span class="value"><& ShowGroupMembers, Group => $Ticket->AdminCc, Ticket => $Ticket &></span>
+ <div class="form-row admincc<% $Ticket->AdminCc->MembersObj->Count ? q{} : q{ unset-field}%>">
+ <div class="label col-md-3"><&|/l&>AdminCc</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowGroupMembers, Group => $Ticket->AdminCc, Ticket => $Ticket &></span></div>
</div>

% my $multi_roles = $Ticket->QueueObj->CustomRoles;
% $multi_roles->LimitToMultipleValue;
% $m->callback( CustomRoles => $multi_roles, SingleRoles => 0, Ticket => $Ticket, %ARGS, CallbackName => 'ModifyCustomRoles' );
% while (my $role = $multi_roles->Next) {
- <div class="field">
- <span class="labeltop"><% $role->Name %>:</span>
- <span class="value"><& ShowGroupMembers, Group => $Ticket->RoleGroup($role->GroupType), Ticket => $Ticket &></span>
+ <div class="form-row">
+ <div class="label col-md-3"><% $role->Name %>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><& ShowGroupMembers, Group => $Ticket->RoleGroup($role->GroupType), Ticket => $Ticket &></span></div>
</div>
% }

diff --git a/share/html/Ticket/Elements/ShowRequestor b/share/html/Ticket/Elements/ShowRequestor
index 759f451e1..cae6b492f 100644
--- a/share/html/Ticket/Elements/ShowRequestor
+++ b/share/html/Ticket/Elements/ShowRequestor
@@ -75,8 +75,8 @@

% 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 class="label col-md-3"><&|/l&>Comments about this user</&>:</div>
+ <div class="value col-md-9"><span class="form-control current-value"><% ($requestor->Comments || loc("No comment entered about this user")) %></span></div>
</div>
% }

@@ -106,7 +106,7 @@
<& $TicketTemplate, Requestor => $requestor &>
% } else {
<div id="requestor-<%$requestor->Id%>-ticket-tab-<% $index++ %>" class="hidden">
- <span class="label"><&|/l&>Loading...</&></span>
+ <div class="label col-md-3"><&|/l&>Loading...</&></div>
% }
</div>
% }
@@ -116,15 +116,15 @@
% my $grouplimit = RT->Config->Get('MoreAboutRequestorGroupsLimit');
% if ( $ShowGroups and defined $grouplimit ) {
<div class="more-about-user-groups">
- <span class="label">
+ <div class="label col-md-3">
<&|/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>]
% }
- </span>
- <span class="value"><& /Elements/ShowMemberships, UserObj => $requestor, Limit => $grouplimit &></span>
+ </div>
+ <div class="value col-md-9"><span class="form-control current-value"><& /Elements/ShowMemberships, UserObj => $requestor, Limit => $grouplimit &></span></div>
</div>
% }

diff --git a/share/html/Ticket/Elements/UpdateCc b/share/html/Ticket/Elements/UpdateCc
index 7ead9ba98..50685bf56 100644
--- a/share/html/Ticket/Elements/UpdateCc
+++ b/share/html/Ticket/Elements/UpdateCc
@@ -49,7 +49,7 @@

<div class="form-row">
<div class="col-md-3 label">
- <span class="label"><&|/l&>One-time Cc</&>:</span>
+ <&|/l&>One-time Cc</&>:
</div>
<div class="col-md-9 value">
<& /Elements/EmailInput, Name => 'UpdateCc', Size => undef, Default => $ARGS{UpdateCc}, AutocompleteMultiple => 1 &>
@@ -101,7 +101,7 @@

<div class="form-row">
<div class="col-md-3 label">
- <span class="label"><&|/l&>One-time Bcc</&>:</span>
+ <&|/l&>One-time Bcc</&>:
</div>
<div class="col-md-9 value">
<& /Elements/EmailInput, Name => 'UpdateBcc', Size => undef, Default => $ARGS{UpdateBcc}, AutocompleteMultiple => 1 &>
@@ -158,6 +158,7 @@ jQuery(function() {
});
</script>
%}
+ </div>
</div>
</div>
<%args>
diff --git a/share/html/Ticket/Forward.html b/share/html/Ticket/Forward.html
index 5e21fa60e..de26a263b 100644
--- a/share/html/Ticket/Forward.html
+++ b/share/html/Ticket/Forward.html
@@ -59,53 +59,53 @@
<& /Elements/Crypt/SignEncryptWidget:ShowIssues, self => $gnupg_widget &>

<&|/Widgets/TitleBox, title => loc('Message'), class => 'messagedetails' &>
-<div class="wide fields">
- <div class="field">
- <span class="label"><&|/l&>From</&>:</span>
- <span class="value"><% $from %></span>
+<div class="wide">
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>From</&>:</div>
+ <div class="value col-md-9"><% $from %></div>
</div>

- <div class="field">
- <span class="label"><&|/l&>Subject</&>:</span>
- <span class="value"><input class="form-control" type="text" name="Subject" value="<% $ARGS{'Subject'} || $subject %>" /></span>
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>Subject</&>:</div>
+ <div class="value col-md-9"><input class="form-control" type="text" name="Subject" value="<% $ARGS{'Subject'} || $subject %>" /></div>
</div>

- <div class="field">
- <span class="label"><&|/l&>To</&>:</span>
- <span class="value"><& /Elements/EmailInput, Name => "To", AutocompleteMultiple => 1, Default => $ARGS{'To'} &></span>
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>To</&>:</div>
+ <div class="value col-md-9"><& /Elements/EmailInput, Name => "To", AutocompleteMultiple => 1, Default => $ARGS{'To'} &></div>
</div>

- <div class="field">
- <span class="label"><&|/l&>Cc</&>:</span>
- <span class="value"><& /Elements/EmailInput, Name => "Cc", AutocompleteMultiple => 1, Default => $ARGS{'Cc'} &></span>
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>Cc</&>:</div>
+ <div class="value col-md-9"><& /Elements/EmailInput, Name => "Cc", AutocompleteMultiple => 1, Default => $ARGS{'Cc'} &></div>
</div>

- <div class="field">
- <span class="label"><&|/l&>Bcc</&>:</span>
- <span class="value"><& /Elements/EmailInput, Name => "Bcc", AutocompleteMultiple => 1, Default => $ARGS{'Bcc'} &></span>
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>Bcc</&>:</div>
+ <div class="value col-md-9"><& /Elements/EmailInput, Name => "Bcc", AutocompleteMultiple => 1, Default => $ARGS{'Bcc'} &></div>
</div>

% if ( $gnupg_widget ) {
- <div class="field">
+ <div class="form-row">
<span class="label empty">&nbsp;</span>
- <span class="value">
+ <div class="value col-md-9">
<& /Elements/Crypt/SignEncryptWidget,
self => $gnupg_widget,
TicketObj => $TicketObj,
&>
- </span>
+ </div>
</div>
% }

- <div class="field">
- <span class="label"><&|/l&>Message</&>:</span>
- <span class="value">
+ <div class="form-row">
+ <div class="label col-md-3"><&|/l&>Message</&>:</div>
+ <div class="value col-md-9">
% if (exists $ARGS{Content}) {
<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0, SuppressAttachmentWarning => 1 &>
% } else {
<& /Elements/MessageBox, SuppressAttachmentWarning => 1 &>
%}
- </span>
+ </div>
</div>
</div>

diff --git a/share/html/Ticket/Graphs/Elements/ShowLegends b/share/html/Ticket/Graphs/Elements/ShowLegends
index 9626f43b2..51516e63d 100644
--- a/share/html/Ticket/Graphs/Elements/ShowLegends
+++ b/share/html/Ticket/Graphs/Elements/ShowLegends
@@ -47,7 +47,7 @@
%# END BPS TAGGED BLOCK }}}
<&| /Widgets/TitleBox, title => loc('Legends'), hideable => $hideable &>
<div class="form-row">
- <span class="label"><% loc('Status') %>:</span>
+ <div class="label col-md-3"><% loc('Status') %>:</div>
% foreach my $status ( sort keys %RT::Graph::Tickets::ticket_status_style ) {
% my $style = $RT::Graph::Tickets::ticket_status_style{ $status };
<span class="value" style="color: <% $style->{'fontcolor'} %>; padding: 0.6em; border: 1px solid black;"><% loc($status) %></span>
@@ -56,7 +56,7 @@

% if ( $FillUsing ) {
<div class="form-row">
- <span class="label"><% loc($FillUsing) %>:</span>
+ <div class="label col-md-3"><% loc($FillUsing) %>:</div>
% foreach my $value ( sort keys %RT::Graph::Tickets::fill_cache ) {
% my $color = $RT::Graph::Tickets::fill_cache{ $value };
<span class="value" style="background-color: <% $color %>; padding: 0.6em; border: 1px solid black;"><% loc($value) %></span>
diff --git a/share/html/Ticket/Modify.html b/share/html/Ticket/Modify.html
index 0608de827..070875335 100644
--- a/share/html/Ticket/Modify.html
+++ b/share/html/Ticket/Modify.html
@@ -56,7 +56,7 @@
<input type="hidden" class="hidden" name="id" value="<% $TicketObj->Id %>" />

<&| /Widgets/TitleBox, title => loc('Modify ticket #[_1]',$TicketObj->Id), class=>'ticket-info-basics' &>
-<div class="fields">
+<div>
<& Elements/EditBasics, TicketObj => $TicketObj, defaults => \%ARGS, InTable => 1 &>
<& /Elements/EditCustomFields, %ARGS, Object => $TicketObj, Grouping => 'Basics', InTable => 1 &>
</div>
diff --git a/share/html/Ticket/ModifyAll.html b/share/html/Ticket/ModifyAll.html
index a7f9ca8fa..0a2ce9cab 100644
--- a/share/html/Ticket/ModifyAll.html
+++ b/share/html/Ticket/ModifyAll.html
@@ -58,7 +58,7 @@
<input type="hidden" class="hidden" name="Token" value="<% $ARGS{'Token'} %>" />

<&| /Widgets/TitleBox, title => loc('Modify ticket # [_1]', $Ticket->Id), class=>'ticket-info-basics' &>
-<div class="fields">
+<div>
<& Elements/EditBasics, TicketObj => $Ticket, defaults => \%ARGS, ExcludeCustomRoles => 1, InTable => 1 &>
<& /Elements/EditCustomFields, Object => $Ticket, Grouping => 'Basics', InTable => 1 &>
</div>
@@ -94,10 +94,10 @@
<br />

<&| /Widgets/TitleBox, title => loc('Update ticket'), class => 'messagedetails' &>
-<div class="fields">
- <div class="field input-row">
- <span class="label"><&|/l&>Update Type</&>:</span>
- <span class="value entry">
+<div>
+ <div class="form-row input-row">
+ <div class="label col-md-3"><&|/l&>Update Type</&>:</div>
+ <div class="value col-md-9">
<select name="UpdateType" id="UpdateType" class="form-control selectpicker">
% if ($CanComment) {
<option value="private" ><&|/l&>Comments (Not sent to requestors)</&></option>
@@ -107,29 +107,29 @@
% }
</select>
% $m->callback( %ARGS, CallbackName => 'AfterUpdateType' );
- </span>
+ </div>
</div>
- <div class="field input-row">
- <span class="label"><&|/l&>Subject</&>:</span>
- <span class="value entry"><input class="form-control" type="text" name="UpdateSubject" value="<%$Ticket->Subject%>" />
+ <div class="form-row input-row">
+ <div class="label col-md-3"><&|/l&>Subject</&>:</div>
+ <div class="value col-md-9"><input class="form-control" type="text" name="UpdateSubject" value="<%$Ticket->Subject%>" />
% $m->callback( %ARGS, CallbackName => 'AfterSubject' );
- </span>
+ </div>
</div>

<& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $Ticket &>

<& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $Ticket &>

- <div class="field input-row">
- <span class="labeltop"><&|/l&>Message</&>:</span>
- <span class="value entry messagebox-container action-<% $ARGS{UpdateType} || ($CanComment ? 'private' : 'response') %>">
+ <div class="form-row input-row">
+ <div class="label col-md-3"><&|/l&>Message</&>:</div>
+ <div class="value col-md-9 messagebox-container action-<% $ARGS{UpdateType} || ($CanComment ? 'private' : 'response') %>">
% $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' );
% if (defined $ARGS{UpdateContent} && length($ARGS{UpdateContent})) {
<& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0 &>
% } else {
<& /Elements/MessageBox, Name=>"UpdateContent", QuoteTransaction=>$ARGS{QuoteTransaction} &>
% }
- </span>
+ </div>
</div>
</div>
</&>
diff --git a/share/html/Ticket/Update.html b/share/html/Ticket/Update.html
index a2354f768..7e08464d8 100644
--- a/share/html/Ticket/Update.html
+++ b/share/html/Ticket/Update.html
@@ -51,6 +51,7 @@
% $m->callback(CallbackName => 'BeforeActionList', ARGSRef => \%ARGS, Ticket => $TicketObj);
<& /Elements/ListActions, actions => \@results &>

+<div>
<form action="Update.html" name="TicketUpdate"
method="post" enctype="multipart/form-data">
% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS, Ticket => $TicketObj, CanRespond => $CanRespond, CanComment => $CanComment, ResponseDefault => $ResponseDefault, CommentDefault => $CommentDefault );
@@ -63,7 +64,7 @@

<div id="ticket-update-metadata">
<&|/Widgets/TitleBox, title => loc('Ticket and Transaction'), class => 'ticket-info-basics' &>
-<div class="fields">
+<div>
% $m->callback(CallbackName => 'AfterTableOpens', ARGSRef => \%ARGS, Ticket => $TicketObj);

% my $skip;
@@ -71,8 +72,8 @@
% if (!$skip) {
<input type="hidden" class="hidden" name="id" value="<%$TicketObj->Id%>" />
% }
-<div class="field"><span class="label"><&|/l&>Update Type</&>:</span>
-<span class="value"><select class="form-control selectpicker" name="UpdateType" id="UpdateType">
+<div class="form-row"><div class="label col-md-3"><&|/l&>Update Type</&>:</div>
+<div class="value col-md-9"><select class="form-control selectpicker" name="UpdateType" id="UpdateType">
% if ($CanComment) {
<option value="private" <% ($ARGS{'UpdateType'} && $ARGS{'UpdateType'} eq "private") ? qq[ selected="selected"] : !$ARGS{'UpdateType'}&&$CommentDefault |n %>><&|/l&>Comments (Not sent to requestors)</&></option>
% }
@@ -82,7 +83,7 @@
</select>

% $m->callback( %ARGS, CallbackName => 'AfterUpdateType' );
-</span></div>
+</div></div>

<& /Ticket/Elements/EditBasics,
TicketObj => $TicketObj,
@@ -144,50 +145,51 @@
<& /Ticket/Elements/UpdateCc, %ARGS, TicketObj => $TicketObj &>

% if ( $gnupg_widget ) {
-<div class="col-md-3 label">
- <span class="label empty">&nbsp;</span>
-</div>
-<div class="col-md-9 value">
-<& /Elements/Crypt/SignEncryptWidget,
- self => $gnupg_widget,
- TicketObj => $TicketObj,
-&>
+<div class="form-row">
+ <div class="col-md-3 label empty"></div>
+ <div class="col-md-9 value">
+ <& /Elements/Crypt/SignEncryptWidget,
+ self => $gnupg_widget,
+ TicketObj => $TicketObj,
+ &>
+ </div>
</div>
% }
% $m->callback( %ARGS, CallbackName => 'AfterGnuPG' );

-<div class="col-md-3 label">
- <span class="label"><&|/l&>Subject</&>:</span>
-</div>
-<div class="col-md-9 value">
- <input class="form-control" type="text" name="UpdateSubject" value="<% $ARGS{UpdateSubject} || $TicketObj->Subject || '' %>" />
+<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" value="<% $ARGS{UpdateSubject} || $TicketObj->Subject || '' %>" />
% $m->callback( %ARGS, CallbackName => 'AfterSubject' );
+ </div>
</div>

-<div class="col-md-3 label">
- <span class="labeltop"><&|/l&>Message</&>:</span>
-</div>
-<div class="col-md-9 value messagebox-container action-<% $type %>">
-<& /Articles/Elements/BeforeMessageBox, %ARGS &>
+<div class="form-row">
+ <div class="col-md-3 label">
+ <div class="label col-md-3"><&|/l&>Message</&>:</div>
+ </div>
+ <div class="col-md-9 value messagebox-container action-<% $type %>">
+ <& /Articles/Elements/BeforeMessageBox, %ARGS &>
% $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' );
% if (exists $ARGS{UpdateContent}) {
% # preserve QuoteTransaction so we can use it to set up sane references/in/reply to
% my $temp = $ARGS{'QuoteTransaction'};
% delete $ARGS{'QuoteTransaction'};
-<& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0, %ARGS&>
+ <& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0, %ARGS&>
% $ARGS{'QuoteTransaction'} = $temp;
% } else {
% my $IncludeSignature = 1;
% $IncludeSignature = 0 if $Action ne 'Respond' && !RT->Config->Get('MessageBoxIncludeSignatureOnComment');
-<& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &>
+ <& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &>
% }
% $m->callback( %ARGS, CallbackName => 'AfterMessageBox' );
+ </div>
</div>

-<div class="col-md-3 label"></div>
-<div class="col-md-9 value">
<& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $TicketObj &>
-</div>
</&>

% $m->callback( %ARGS, CallbackName => 'BeforeSubmit', Ticket => $TicketObj );
@@ -212,6 +214,7 @@
% $m->callback( %ARGS, CallbackName => 'AfterScrips', Ticket => $TicketObj );

</form>
+</div>
<hr class="clear" />

% $m->callback( %ARGS, CallbackName => 'AfterForm', Ticket => $TicketObj );
diff --git a/share/html/User/Elements/TicketList b/share/html/User/Elements/TicketList
index 68a1e09e4..96c067146 100644
--- a/share/html/User/Elements/TicketList
+++ b/share/html/User/Elements/TicketList
@@ -48,7 +48,7 @@
% if ( $TitleBox ) {
<& /Widgets/TitleBoxStart, title => $Title, title_raw => $title_raw, title_href => $url, class => $Class &>
% } else {
- <span class="label"><a href="<% $url %>"><% $Title %>:</a></span>
+ <div class="label col-md-3"><a href="<% $url %>"><% $Title %>:</a></div>
% }

<& /Elements/CollectionList,

commit b37a3ced827f60c2b665fabbd35f6fed3b89bf80
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Jul 24 02:58:39 2019 +0800

Migrate /Elements/Crypt/SignEncryptWidget to elevator themes

diff --git a/share/html/Elements/Crypt/SignEncryptWidget b/share/html/Elements/Crypt/SignEncryptWidget
index 815234c13..73e2f1381 100644
--- a/share/html/Elements/Crypt/SignEncryptWidget
+++ b/share/html/Elements/Crypt/SignEncryptWidget
@@ -45,28 +45,26 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<table><tr>
-% my $columnsplit = "</td><td>";
+<div class="form-row">
+ <div class="col-md-auto">
% if ( RT->Config->Get('Crypt')->{'Outgoing'} eq 'GnuPG' ) {
-<td><% loc( 'Sign[_1][_2] using [_3]',
- $columnsplit,
- $m->scomp('/Widgets/Form/Boolean:InputOnly',
- Name => 'Sign', CurrentValue => $self->{'Sign'}
- ),
- $m->scomp('SelectKeyForSigning', User => $session{'CurrentUser'}->UserObj ),
-) |n %></td>
+ <& '/Widgets/Form/Boolean:InputOnly',
+ Name => 'Sign', CurrentValue => $self->{'Sign'},
+ DefaultLabel => loc( 'Sign using [_1]', $m->scomp('SelectKeyForSigning', User => $session{'CurrentUser'}->UserObj ) ),
+ &>
% } else {
-<td><% loc( 'Sign[_1][_2]',
- $columnsplit,
- $m->scomp('/Widgets/Form/Boolean:InputOnly',
- Name => 'Sign', CurrentValue => $self->{'Sign'}
- ),
-) |n %></td>
+ <& '/Widgets/Form/Boolean:InputOnly',
+ Name => 'Sign', CurrentValue => $self->{'Sign'},
+ DefaultLabel => loc( 'Sign' ),
+ &>
+ </div>
% }

-<td><% loc('Encrypt')%></td>
-<td><& /Widgets/Form/Boolean:InputOnly, Name => 'Encrypt', CurrentValue => $self->{'Encrypt'} &></td>
-</tr></table>
+ <div class="col-md-auto">
+ <& /Widgets/Form/Boolean:InputOnly, Name => 'Encrypt', CurrentValue => $self->{'Encrypt'}, DefaultLabel => loc( 'Encrypt' ) &>
+ </div>
+</div>
+
<%ARGS>
$self => undef,
</%ARGS>

commit 432ca10edd98dcb76cf151972fc4e11527791f28
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Jul 24 03:21:37 2019 +0800

Migrate /Elements/QuickCreate to elevator themes

diff --git a/share/html/Elements/QuickCreate b/share/html/Elements/QuickCreate
index 09a822de4..574a116f8 100644
--- a/share/html/Elements/QuickCreate
+++ b/share/html/Elements/QuickCreate
@@ -83,7 +83,12 @@
<div class="value col-md-9"><textarea class="form-control" name="Content" cols="50" rows="3"><% $args->{Content} || ''%></textarea></div>
</div>
</div>
-<& /Elements/Submit, Label => loc('Create') &>
+
+<div class="form-row">
+ <div class="col-md-12">
+ <& /Elements/Submit, Label => loc('Create') &>
+ </div>
+</div>
</form>
</&>
</div>

commit b4760981efc5ad2fc4cee19eb0f919f3f2a02fca
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Jul 24 03:23:22 2019 +0800

Migrate our own responsive solution to bootstrap

diff --git a/share/html/Elements/EditLinks b/share/html/Elements/EditLinks
index b9c4d4661..a894cd833 100644
--- a/share/html/Elements/EditLinks
+++ b/share/html/Elements/EditLinks
@@ -49,7 +49,7 @@
<div class="boxcontainer col-md-6">
<h3><&|/l&>Current Links</&></h3>

-<div class="wide">
+<div>
<div class="form-row">
<div class="label col-md-3"><& ShowRelationLabel, Object => $Object, Label => loc('Depends on').':', Relation => 'DependsOn' &></div>
<div class="value col-md-9">
diff --git a/share/html/Elements/QuickCreate b/share/html/Elements/QuickCreate
index 574a116f8..25e4b5907 100644
--- a/share/html/Elements/QuickCreate
+++ b/share/html/Elements/QuickCreate
@@ -53,7 +53,7 @@
% $m->callback(CallbackName => 'InFormElement');
>
<input type="hidden" class="hidden" name="QuickCreate" value="1" />
-<div class="wide">
+<div>
<div class="form-row input-row">
<div class="label col-md-3"><&|/l&>Subject</&>:</div>
<div class="value col-md-9"><input type="text" size="50" class="form-control" name="Subject" value="<% $args->{Subject} || '' %>" /></div>
diff --git a/share/html/Elements/ShowLinks b/share/html/Elements/ShowLinks
index de22d2fa7..914ca1925 100644
--- a/share/html/Elements/ShowLinks
+++ b/share/html/Elements/ShowLinks
@@ -45,7 +45,7 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<div class="wide">
+<div>
% for my $type (@display) {
<div class="form-row <%$type%><% $clone{$type} || $Object->$type->Count ? q{} : q{ unset-field}%>">
<div class="label col-md-3">
diff --git a/share/html/Ticket/Forward.html b/share/html/Ticket/Forward.html
index de26a263b..c7a12f926 100644
--- a/share/html/Ticket/Forward.html
+++ b/share/html/Ticket/Forward.html
@@ -59,7 +59,7 @@
<& /Elements/Crypt/SignEncryptWidget:ShowIssues, self => $gnupg_widget &>

<&|/Widgets/TitleBox, title => loc('Message'), class => 'messagedetails' &>
-<div class="wide">
+<div>
<div class="form-row">
<div class="label col-md-3"><&|/l&>From</&>:</div>
<div class="value col-md-9"><% $from %></div>
diff --git a/share/html/Ticket/Update.html b/share/html/Ticket/Update.html
index 7e08464d8..edf2bdfd4 100644
--- a/share/html/Ticket/Update.html
+++ b/share/html/Ticket/Update.html
@@ -169,7 +169,7 @@

<div class="form-row">
<div class="col-md-3 label">
- <div class="label col-md-3"><&|/l&>Message</&>:</div>
+ <&|/l&>Message</&>:
</div>
<div class="col-md-9 value messagebox-container action-<% $type %>">
<& /Articles/Elements/BeforeMessageBox, %ARGS &>
diff --git a/share/static/css/base-responsive/forms.css b/share/static/css/base-responsive/forms.css
index 769c2cd1c..636c60991 100644
--- a/share/static/css/base-responsive/forms.css
+++ b/share/static/css/base-responsive/forms.css
@@ -110,73 +110,6 @@ div.results .titlebox-content {
margin-bottom: 0;
}

-.fields {
- display: table;
-}
-.fields .field {
- display: table-row;
-}
-.fields .label,
-.fields .labeltop,
-.fields .cflabel,
-.fields .value {
- display: table-cell;
- vertical-align: middle;
- padding-top: 0.5em;
-}
-
-.fields > .field:last-child > .label,
-.fields > .field:last-child > .labeltop,
-.fields > .field:last-child > .cflabel,
-.fields > .field:last-child > .value {
- padding-bottom: 0.5em;
-}
-
-
-.fields .value > .label {
- padding-left: 3em;
-}
-.fields .value > .label,
-.fields .value > .value {
- display: inline;
-}
-
-@media (max-width: 1200px) {
- .wide.fields {
- display: block;
- }
- .wide.fields .field {
- display: block;
- margin-bottom: 1em;
- }
- .wide.fields .label,
- .wide.fields .labeltop,
- .wide.fields .cflabel,
- .wide.fields .value {
- display: inline;
- }
-
- .wide.fields .value > ul {
- margin-top: 0;
- }
- .wide.fields .value > ul,
- .wide.fields .value > .checkboxes {
- margin-left: 1.5em;
- }
-}
-
-@media (max-width: 700px) {
- .fields .value .current-value {
- display: block;
- }
-
- /* hack to force quickcreate to break queue/owner row across two lines */
- .wide.fields .value > .label:before {
- content: '\a\a';
- white-space: pre;
- }
-}
-
.label, .labeltop {
text-align: right;
padding-right: .5em;
diff --git a/share/static/css/base-responsive/ticket.css b/share/static/css/base-responsive/ticket.css
index 059b8f998..861389d68 100644
--- a/share/static/css/base-responsive/ticket.css
+++ b/share/static/css/base-responsive/ticket.css
@@ -123,13 +123,6 @@ input.reminder-subject {
width: 24em;
}

-.messagedetails .fields {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- width: 100%;
-}
-
.ticket-info-attachments .revision {
font-size: 85%;
}
diff --git a/share/static/css/base/forms.css b/share/static/css/base/forms.css
index 95e5f9cf1..0e6210233 100644
--- a/share/static/css/base/forms.css
+++ b/share/static/css/base/forms.css
@@ -111,19 +111,6 @@ div.results .titlebox-content {
margin-bottom: 0;
}

-.fields {
- display: table;
-}
-.fields .field {
- display: table-row;
-}
-.fields .label,
-.fields .labeltop,
-.fields .cflabel,
-.fields .value {
- display: table-cell;
-}
-
.label, .labeltop {
text-align: right;
font-size: 0.8em;
diff --git a/share/static/css/base/misc.css b/share/static/css/base/misc.css
index 6e550802a..25ec20c69 100644
--- a/share/static/css/base/misc.css
+++ b/share/static/css/base/misc.css
@@ -31,18 +31,18 @@ hr.clear {
/* Custom fields */

/* Only apply these when we're not rendering in a table, hence the leading div. */
-div.edit-custom-field:not(.field) {
+div.edit-custom-field {
width: 48%;
float: left;
margin: 0.5em;
}

-div.edit-custom-field:not(.field) .cflabel {
+div.edit-custom-field .cflabel {
float: left;
padding-right: 0.5em;
}

-div.edit-custom-field:not(.field) .entry {
+div.edit-custom-field .entry {
margin-left: 10em;
}

diff --git a/share/static/css/base/ticket.css b/share/static/css/base/ticket.css
index 44bd05391..82d886e65 100644
--- a/share/static/css/base/ticket.css
+++ b/share/static/css/base/ticket.css
@@ -136,13 +136,6 @@ input.reminder-subject {
width: 30em;
}

-.messagedetails .fields {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- width: 100%;
-}
-
.ticket-info-attachments .revision {
font-size: 85%;
}
diff --git a/share/static/css/elevator-light/forms.css b/share/static/css/elevator-light/forms.css
index 21ffe40f5..0ae7b0cd3 100644
--- a/share/static/css/elevator-light/forms.css
+++ b/share/static/css/elevator-light/forms.css
@@ -153,10 +153,6 @@ span.current-value.form-control {
padding: 0.25em;
}

-.messagedetails .fields {
- max-width: 1200px;
-}
-
.bootstrap-select button:focus {
background: #f8f9fa;
}

commit e89a5e7ebfbdfd9a2769ed36e6aa511598a81876
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Jul 30 03:56:29 2019 +0800

Drop reminder subject input width css

This is for consistency as other inputs in the form don't have this.

diff --git a/share/static/css/base-responsive/ticket.css b/share/static/css/base-responsive/ticket.css
index 861389d68..c3898ce81 100644
--- a/share/static/css/base-responsive/ticket.css
+++ b/share/static/css/base-responsive/ticket.css
@@ -118,11 +118,6 @@ tr.edit-custom-field.cftype-Wikitext textarea
width: 100%;
}

-input.reminder-subject {
- max-width: 80%;
- width: 24em;
-}
-
.ticket-info-attachments .revision {
font-size: 85%;
}

commit 2c7da29e3f9c3214150526c3b67ca2f3fdef934f
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Jul 30 22:15:12 2019 +0800

Fix vertical alignment for inputs in "Display Columns"

diff --git a/share/html/Search/Elements/EditFormat b/share/html/Search/Elements/EditFormat
index 31a2ca9a1..626e7e3cf 100644
--- a/share/html/Search/Elements/EditFormat
+++ b/share/html/Search/Elements/EditFormat
@@ -93,13 +93,15 @@ jQuery( function() {

<div class="col-md-3">
<div class="form-row">
- <select name="SelectDisplayColumns" multiple="multiple" class="form-control selectpicker">
+ <div class="col-md-12">
+ <select name="SelectDisplayColumns" multiple="multiple" class="form-control selectpicker">
% my %seen;
% foreach my $field ( grep !$seen{lc $_}++, @$AvailableColumns) {
- <option value="<% $field %>" <% $selected{$field} ? 'selected="selected"' : '' |n%>>\
- <% $field =~ /^(?:CustomField|CF)\./ ? $field : loc($field) %></option>
+ <option value="<% $field %>" <% $selected{$field} ? 'selected="selected"' : '' |n%>>\
+ <% $field =~ /^(?:CustomField|CF)\./ ? $field : loc($field) %></option>
% }
- </select>
+ </select>
+ </div>
</div>
</div>

@@ -149,18 +151,26 @@ jQuery( function() {
</div>
</div>

- <div class="col-md-1"><input type="submit" class="button btn btn-primary" name="AddCol" value=" &rarr; " /></div>
+ <div class="col-md-1">
+ <div class="form-row">
+ <div class="col-md-12">
+ <input type="submit" class="button btn btn-primary" name="AddCol" value=" &rarr; " />
+ </div>
+ </div>
+ </div>

<div class="col-md-4">
<div class="form-row">
- <select size="8" class="tall form-control" name="CurrentDisplayColumns">
+ <div class="col-md-12">
+ <select size="8" class="tall form-control" name="CurrentDisplayColumns">
% my $i=0;
% my $current = $ARGS{CurrentDisplayColumns} || ''; $current =~ s/^\d+>//;
% foreach my $field ( @$CurrentFormat ) {
- <option value="<% $i++ %>><% $field->{Column} %>" <% $field->{Column} eq $current ? 'selected="selected"' : '' |n%>>\
+ <option value="<% $i++ %>><% $field->{Column} %>" <% $field->{Column} eq $current ? 'selected="selected"' : '' |n%>>\
<% $field->{Column} =~ /^(?:CustomField|CF)\./ ? $field->{Column} : loc( $field->{Column} ) %></option>
% }
- </select>
+ </select>
+ </div>
</div>

<div class="form-row">

commit d95b75a9825d69e007b81539fec6dde38b3ddd28
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Jul 30 23:16:05 2019 +0800

Update tests for the change of our own responsive UI => bootstrap

diff --git a/t/web/ticket_modify_all.t b/t/web/ticket_modify_all.t
index 95941f1db..16a844924 100644
--- a/t/web/ticket_modify_all.t
+++ b/t/web/ticket_modify_all.t
@@ -46,28 +46,28 @@ $m->get_ok($url . "/Ticket/ModifyAll.html?id=" . $ticket->id);
$m->form_name('TicketModifyAll');
$m->field('Starts_Date' => "2013-01-01 00:00:00");
$m->click('SubmitTicket');
-$m->text_like(qr/Starts:\s+\Q(Tue Jan 01 00:00:00 2013)/, 'start date successfully updated');
+$m->text_like(qr/Starts:\s*\Q(Tue Jan 01 00:00:00 2013)/, 'start date successfully updated');

$m->form_name('TicketModifyAll');
$m->field('Started_Date' => "2014-01-01 00:00:00");
$m->click('SubmitTicket');
-$m->text_like(qr/Started:\s+\Q(Wed Jan 01 00:00:00 2014)/, 'started date successfully updated');
+$m->text_like(qr/Started:\s*\Q(Wed Jan 01 00:00:00 2014)/, 'started date successfully updated');

$m->form_name('TicketModifyAll');
$m->field('Told_Date' => "2015-01-01 00:00:00");
$m->click('SubmitTicket');
-$m->text_like(qr/Last Contact:\s+\Q(Thu Jan 01 00:00:00 2015)/, 'told date successfully updated');
+$m->text_like(qr/Last Contact:\s*\Q(Thu Jan 01 00:00:00 2015)/, 'told date successfully updated');

for my $unset ("0", "-", " ") {
$m->form_name('TicketModifyAll');
$m->field('Due_Date' => "2016-01-01 00:00:00");
$m->click('SubmitTicket');
- $m->text_like(qr/Due:\s+\Q(Fri Jan 01 00:00:00 2016)/, 'due date successfully updated');
+ $m->text_like(qr/Due:\s*\Q(Fri Jan 01 00:00:00 2016)/, 'due date successfully updated');

$m->form_name('TicketModifyAll');
$m->field('Due_Date' => $unset);
$m->click('SubmitTicket');
- $m->text_like(qr/Due:\s+\Q(Not set)/, "due date successfully cleared with '$unset'");
+ $m->text_like(qr/Due:\s*\Q(Not set)/, "due date successfully cleared with '$unset'");

if ( $unset eq '-' ) {
my @warnings = $m->get_warnings;

commit 44cc685025ab630670d0aed634375d9bec0fd7a8
Author: sunnavy <sunnavy@bestpractical.com>
Date: Fri Aug 2 05:23:16 2019 +0800

Migrate MyReminders to elevator themes

diff --git a/share/html/Elements/ShowReminders b/share/html/Elements/ShowReminders
index 268227f04..e346c0452 100644
--- a/share/html/Elements/ShowReminders
+++ b/share/html/Elements/ShowReminders
@@ -46,7 +46,7 @@
%#
%# END BPS TAGGED BLOCK }}}
% if ( $reminders->Count ) {
-<table border="0" cellpadding="1" cellspacing="0" width="100%" class="collection-as-table">
+<table border="0" cellpadding="1" cellspacing="0" width="100%" class="collection-as-table table">
<tr>
<th class="collection-as-table"><&|/l&>Reminder</&></th>
<th class="collection-as-table"><&|/l&>Due</&></th>

commit b72f4b3d8825b002662ec09a9ca3271fafa0be00
Author: sunnavy <sunnavy@bestpractical.com>
Date: Mon Aug 5 21:24:16 2019 +0800

Switch from span to div for inputs

Previously some code used span.label.col-md-3, span.value.col-md-9 for
the migration, which is inconsistent and not necessary.

diff --git a/share/html/Elements/Login b/share/html/Elements/Login
index 700e40c10..21a40c64a 100644
--- a/share/html/Elements/Login
+++ b/share/html/Elements/Login
@@ -67,21 +67,21 @@
<form id="login" name="login" method="post" action="<% RT->Config->Get('WebPath') %>/NoAuth/Login.html">

<div class="form-row">
- <span class="label col-md-3">
+ <div class="label col-md-3">
<&|/l&>Username</&>:
- </span>
- <span class="value col-md-9">
+ </div>
+ <div class="value col-md-9">
<input class="form-control" type="text" name="user" value="<%$user%>" id="user" autocapitalize="off" />
- </span>
+ </div>
</div>

<div class="form-row">
- <span class="label col-md-3">
+ <div class="label col-md-3">
<&|/l&>Password</&>:
- </span>
- <span class="value col-md-9">
+ </div>
+ <div class="value col-md-9">
<input class="form-control" type="password" name="pass" />
- </span>
+ </div>
</div>

<input type="hidden" name="next" value="<% $next %>" />
diff --git a/share/html/SelfService/Elements/RequestUpdate b/share/html/SelfService/Elements/RequestUpdate
index 7c7a87eb7..33300cf61 100644
--- a/share/html/SelfService/Elements/RequestUpdate
+++ b/share/html/SelfService/Elements/RequestUpdate
@@ -54,18 +54,18 @@ action="<%RT->Config->Get('WebPath')%><% $r->path_info %>"
>
<input type="hidden" class="hidden" name="QuickCreate" value="1" />
<div class="form-row">
- <span class="label col-md-3">
+ <div class="label col-md-3">
<&|/l&>Subject</&>:
- </span>
+ </div>
<div class="value col-md-9">
<input class="form-control" type="text" size="50" name="Subject" value="<% $args->{Subject} || loc('Please update my user information') %>" />
</div>
</div>

<div class="form-row">
- <span class="label col-md-3">
+ <div class="label col-md-3">
<&|/l&>Description</&>:
- </span>
+ </div>
<div class="value col-md-9">
<textarea class="form-control" name="Content" cols="50" rows="3"><% $args->{Content} || ''%></textarea></td>
</div>
diff --git a/share/html/Ticket/Create.html b/share/html/Ticket/Create.html
index edb59d64f..d95185faa 100644
--- a/share/html/Ticket/Create.html
+++ b/share/html/Ticket/Create.html
@@ -159,12 +159,12 @@
</div>

<div class="form-row">
- <span class="label empty">&nbsp;</span>
- <span class="comment">
+ <div class="label col-md-3 empty">&nbsp;</div>
+ <div class="value col-md-9 comment">
<i><font size="-2">
<&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)</&>
</font></i>
- </span>
+ </div>
</div>

<div class="form-row">
@@ -173,12 +173,12 @@
</div>

<div class="form-row">
- <span class="label empty">&nbsp;</span>
- <span class="comment">
+ <div class="label col-md-3 empty">&nbsp;</div>
+ <div class="value col-md-9 comment">
<i><font size="-2">
<&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)</&>
</font></i>
- </span>
+ </div>
</div>

% my $roles = $QueueObj->CustomRoles;
@@ -192,12 +192,12 @@

% if ($role->EntryHint) {
<div class="form-row">
- <span class="label empty">&nbsp;</span>
- <span class="comment" colspan="5">
+ <div class="label col-md-3 empty">&nbsp;</div>
+ <div class="value col-md-9 comment" colspan="5">
<i><font size="-2">
<% $role->EntryHint %>
</font></i>
- </span>
+ </div>
</div>
% }
% }
@@ -223,8 +223,8 @@

% if ( $gnupg_widget ) {
<div class="form-row">
-<span class="label empty">&nbsp;</span>
-<div class="value col-md-9"><& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, QueueObj => $QueueObj &></div>
+ <div class="label col-md-3 empty"></div>
+ <div class="value col-md-9"><& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, QueueObj => $QueueObj &></div>
</div>
% }

@@ -306,7 +306,7 @@
</div>
<div class="form-row">
<div class="label col-md-3"><&|/l&>Due</&>:</div>
- <span><& /Elements/SelectDate, Name => "Due", Default => $ARGS{Due} || $QueueObj->DefaultValue('Due') || '' &></span>
+ <div class="value col-md-9"><& /Elements/SelectDate, Name => "Due", Default => $ARGS{Due} || $QueueObj->DefaultValue('Due') || '' &></div>
</div>
<& /Elements/EditCustomFields,
%ARGS,
diff --git a/share/html/Ticket/Elements/EditPeople b/share/html/Ticket/Elements/EditPeople
index ca409ac35..862d5ed29 100644
--- a/share/html/Ticket/Elements/EditPeople
+++ b/share/html/Ticket/Elements/EditPeople
@@ -74,8 +74,8 @@
<h3><&|/l&>People</&></h3>

<div class="form-row">
- <span class="col-md-3 label"><&|/l&>Owner</&>:</span>
- <span class="col-md-6 value"><& /Elements/SelectOwner, Name => 'Owner', QueueObj => $Ticket->QueueObj, TicketObj => $Ticket, Default => $Ticket->OwnerObj->Id, DefaultValue => 0&></span>
+ <div class="col-md-3 label"><&|/l&>Owner</&>:</div>
+ <div class="col-md-6 value"><& /Elements/SelectOwner, Name => 'Owner', QueueObj => $Ticket->QueueObj, TicketObj => $Ticket, Default => $Ticket->OwnerObj->Id, DefaultValue => 0&></div>
</div>

% my @role_fields;
diff --git a/share/html/Tools/MyDay.html b/share/html/Tools/MyDay.html
index d22fbcd5c..edc697568 100644
--- a/share/html/Tools/MyDay.html
+++ b/share/html/Tools/MyDay.html
@@ -67,19 +67,19 @@

<div class="col-md-6">
<div class="form-row">
- <span class="col-md-3 label">
+ <div class="col-md-3 label">
<&|/l&>Worked</&>:
- </span>
- <span class="col-md-9 form-inline value">
+ </div>
+ <div class="col-md-9 form-inline value">
<input class="form-control" type="text" size="3" name="UpdateTimeWorked-<%$Ticket->Id%>" />
<&|/l&>minutes</&>
- </span>
+ </div>
</div>

<div class="form-row">
- <span class="label col-md-3">
+ <div class="label col-md-3">
<&|/l&>Status</&>:
- </span>
+ </div>
<div class="col-md-9 value">
<& /Ticket/Elements/SelectStatus, Name=> 'UpdateStatus-'.$Ticket->Id, TicketObj => $Ticket &>
</div>
@@ -87,9 +87,9 @@
</div>

<div class="col-md-6">
- <span class="label col-md-3">
+ <div class="label col-md-3">
<&|/l&>Comments</&>:
- </span>
+ </div>
<div class="col-md-9 value">
<textarea class="form-control" name="UpdateContent-<%$Ticket->Id%>" rows="5" cols="60"></textarea>
</div>

commit bba70607b1466bb9e4877306d09ed475f4f81c58
Author: sunnavy <sunnavy@bestpractical.com>
Date: Mon Aug 5 21:29:10 2019 +0800

In case label is too long to be shown in one row

This is rare but could happen if the page is not wide enough. Wrapping
is better than being partially hidden.

diff --git a/share/static/css/base-responsive/forms.css b/share/static/css/base-responsive/forms.css
index 636c60991..24b69659a 100644
--- a/share/static/css/base-responsive/forms.css
+++ b/share/static/css/base-responsive/forms.css
@@ -114,7 +114,6 @@ div.results .titlebox-content {
text-align: right;
padding-right: .5em;
padding-top: .5em;
- white-space: nowrap;
}

.cflabel {

commit f95269ccdcfd83bb171b19b44eb3e161218aab9e
Author: sunnavy <sunnavy@bestpractical.com>
Date: Mon Aug 5 21:33:23 2019 +0800

Tweak vertical-alignment for non-inputs using span.current-value.form-control

diff --git a/share/html/Ticket/Create.html b/share/html/Ticket/Create.html
index d95185faa..d9cdb7606 100644
--- a/share/html/Ticket/Create.html
+++ b/share/html/Ticket/Create.html
@@ -79,6 +79,7 @@
comp => '/Ticket/Elements/ShowQueue',
args => {
QueueObj => $QueueObj,
+ Wrap => 1,
},
},
{ name => 'Status',
diff --git a/share/html/Ticket/Elements/AddWatchers b/share/html/Ticket/Elements/AddWatchers
index c485ae63c..2b51b327f 100644
--- a/share/html/Ticket/Elements/AddWatchers
+++ b/share/html/Ticket/Elements/AddWatchers
@@ -94,7 +94,9 @@
&>
</div>
<div class="col-md-3">
- <%$g->Name%> (<%$g->Description%>)
+ <span class="form-control current-value">
+ <%$g->Name%> (<%$g->Description%>)
+ </span>
</div>
</div>
% }
@@ -117,7 +119,9 @@
</div>
<div class="col-md-3">
<input type="hidden" name="WatcherAddressEmail<%$counter%>" value="<%$email->format%>">
- <%$email->format%>
+ <span class="form-control current-value">
+ <%$email->format%>
+ </span>
</div>
</div>
% }
diff --git a/share/html/Ticket/Elements/ShowQueue b/share/html/Ticket/Elements/ShowQueue
index 9cd6d73f0..2b63986a3 100644
--- a/share/html/Ticket/Elements/ShowQueue
+++ b/share/html/Ticket/Elements/ShowQueue
@@ -45,15 +45,24 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
+% if ( $Wrap ) {
+<span class="current-value form-control">
+% }
+
% if ( $query ) {
<a href="<% RT->Config->Get('WebPath') %>/Search/Results.html?Query=<% $query |u,n %>"><% $label %></a>
% } else {
<% $label %>
% }
+
+% if ( $Wrap ) {
+</span>
+% }
<%ARGS>
$Ticket => undef
$QueueObj
$Escape => 1
+$Wrap => undef
</%ARGS>
<%INIT>
my $label = $QueueObj->Name;
diff --git a/share/html/Ticket/Graphs/Elements/ShowLegends b/share/html/Ticket/Graphs/Elements/ShowLegends
index 51516e63d..8cdf5209b 100644
--- a/share/html/Ticket/Graphs/Elements/ShowLegends
+++ b/share/html/Ticket/Graphs/Elements/ShowLegends
@@ -48,19 +48,27 @@
<&| /Widgets/TitleBox, title => loc('Legends'), hideable => $hideable &>
<div class="form-row">
<div class="label col-md-3"><% loc('Status') %>:</div>
+ <div class="value col-md-9">
+ <span class="form-control current-value">
% foreach my $status ( sort keys %RT::Graph::Tickets::ticket_status_style ) {
% my $style = $RT::Graph::Tickets::ticket_status_style{ $status };
- <span class="value" style="color: <% $style->{'fontcolor'} %>; padding: 0.6em; border: 1px solid black;"><% loc($status) %></span>
+ <span class="value" style="color: <% $style->{'fontcolor'} %>; padding: 0.6em; border: 1px solid black;"><% loc($status) %></span>
% }
+ </span>
+ </div>
</div>

% if ( $FillUsing ) {
<div class="form-row">
<div class="label col-md-3"><% loc($FillUsing) %>:</div>
+ <div class="value col-md-9">
+ <span class="form-control current-value">
% foreach my $value ( sort keys %RT::Graph::Tickets::fill_cache ) {
% my $color = $RT::Graph::Tickets::fill_cache{ $value };
- <span class="value" style="background-color: <% $color %>; padding: 0.6em; border: 1px solid black;"><% loc($value) %></span>
+ <span class="value" style="background-color: <% $color %>; padding: 0.6em; border: 1px solid black;"><% loc($value) %></span>
% }
+ </span>
+ </div>
</div>
% }
</&>
diff --git a/share/static/css/elevator-light/forms.css b/share/static/css/elevator-light/forms.css
index 0ae7b0cd3..6645bd637 100644
--- a/share/static/css/elevator-light/forms.css
+++ b/share/static/css/elevator-light/forms.css
@@ -136,10 +136,6 @@ span.current-value.form-control {
margin-top: 1px; /* because input box border is 1px */
}

-.current-watchers div.label {
- padding-top: 0.25em;
-}
-
.list-group-item label {
margin-bottom: 0;
}

commit 6ce546487cc649ee8da097c56eecf41201fb0aaf
Author: sunnavy <sunnavy@bestpractical.com>
Date: Mon Aug 5 21:48:35 2019 +0800

Migrate SimpleSearch to elevator themes

diff --git a/share/html/Elements/SimpleSearch b/share/html/Elements/SimpleSearch
index 65881cdf9..402fc1b6f 100644
--- a/share/html/Elements/SimpleSearch
+++ b/share/html/Elements/SimpleSearch
@@ -46,7 +46,7 @@
%#
%# END BPS TAGGED BLOCK }}}
<form action="<% RT->Config->Get('WebPath') %><% $SendTo %>" id="simple-search">
- <input name="q" accesskey="0" class="field" value="<% $value %>" placeholder="<% $Placeholder %>..." type="search" results=5 autosave="simple-search" />
+ <input name="q" accesskey="0" class="field form-control" value="<% $value %>" placeholder="<% $Placeholder %>..." type="search" results=5 autosave="simple-search" />
</form>
<%init>
my $value = defined $DECODED_ARGS->{q} ? $DECODED_ARGS->{q} : '';

commit 3bdaf9d441b04c574130540b33fc1cfb36150882
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 02:24:37 2019 +0800

Migrate Menu to elevator themes

Our menu is multiple-level, which standard bootstrap doesn't support
right now, so here we continue using superfish.

This commit generally tweaks the appearance to make it a bit bigger and
updates the arrow.

diff --git a/share/static/css/elevator-light/layout.css b/share/static/css/elevator-light/layout.css
index 29a41d63d..2ca36371c 100644
--- a/share/static/css/elevator-light/layout.css
+++ b/share/static/css/elevator-light/layout.css
@@ -65,7 +65,7 @@ div#logo {
position: absolute;
right: 2px;
top: 0;
- height: 2.3em;
+ height: 2.8em;
}

div#logo a img {
@@ -113,7 +113,7 @@ div#quickbar {

div#header {
position: absolute;
- top: 2.3em;
+ top: 2.8em;
left: 0;
right: 0;
height: 3.2em;
diff --git a/share/static/css/elevator-light/nav.css b/share/static/css/elevator-light/nav.css
index 65f6c2204..adb09cfd5 100644
--- a/share/static/css/elevator-light/nav.css
+++ b/share/static/css/elevator-light/nav.css
@@ -13,18 +13,6 @@
background-color: #fff
}

-.sf-sub-indicator {
- background-image: url(../../../static/css/images/arrows-grey.png)
-}
-
-.sf-menu li li .sf-sub-indicator {
- margin-top: -3px
-}
-
-#page-menu.sf-menu li .sf-sub-indicator {
- top: 0.7em
-}
-
#page-menu.sf-menu li:hover ul,
#page-menu.sf-menu li.sfHover ul {
top: 2.5em
@@ -65,7 +53,7 @@

#page-navigation {
position: absolute;
- top: 6em;
+ top: 6.5em;
right: 0;
left: 0;
padding-right: 3em;
@@ -116,7 +104,7 @@
#topactions {
position: absolute;
background: transparent;
- top: 3.25em;
+ top: 3.2em;
right: 0em;
padding-right: 0.7em;
width: auto;
@@ -268,3 +256,45 @@
margin-top: 5px;
}
}
+
+.sf-sub-indicator {
+ display: none;
+}
+
+.sf-menu a.sf-with-ul {
+ padding-right: 1rem;
+}
+
+.sf-menu a.sf-with-ul:after {
+ content: '';
+ width: 10px;
+ height: 10px;
+ border: 0;
+ vertical-align: middle;
+ display: inline-block;
+}
+
+ul.toplevel.sf-menu > li > a.sf-with-ul:after {
+ background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' id='i-chevron-down' viewBox='0 0 12 8' height='100%' width='100%' fill='none' stroke='%2331363E' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'><path d='M1 1 l5 5 5 -5' /></svg>") no-repeat center center;
+ margin-left: 6px;
+ position: relative;
+}
+
+ul.toplevel.sf-menu > li > ul > li a.sf-with-ul:after {
+ background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' id='i-chevron-right' viewBox='0 0 7 12' height='100%' width='100%' fill='none' stroke='%2331363E' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'><path d='M1 1 l5 5 -5 5' /></svg>") no-repeat center center;
+ position: absolute;
+ margin-top: 2px;
+ right: 5px;
+}
+
+#app-nav {
+ padding: 0.5rem;
+}
+
+#topactions form {
+ margin-top: 0.5em;
+}
+
+#topactions form input.btn {
+ border-color: #4868b3;
+}

commit e4dbeb975eeb4fc31514a1a2f2c9d5a82a0cf269
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 03:10:52 2019 +0800

Migrate MessageBox textarea to elevator themes

diff --git a/share/html/Elements/MessageBox b/share/html/Elements/MessageBox
index b798076a6..14381b97d 100644
--- a/share/html/Elements/MessageBox
+++ b/share/html/Elements/MessageBox
@@ -45,7 +45,7 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<textarea autocomplete="off" class="messagebox <% $Type eq 'text/html' ? 'richtext' : '' %>" <% $width_attr %>="<% $Width %>" rows="<% $Height %>" <% $wrap_type |n %> name="<% $Name %>" id="<% $Name %>" placeholder="<% $Placeholder %>">
+<textarea autocomplete="off" class="form-control messagebox <% $Type eq 'text/html' ? 'richtext' : '' %>" <% $width_attr %>="<% $Width %>" rows="<% $Height %>" <% $wrap_type |n %> name="<% $Name %>" id="<% $Name %>" placeholder="<% $Placeholder %>">
% $m->comp('/Articles/Elements/IncludeArticle', %ARGS) if $IncludeArticle;
% $m->callback( %ARGS, SignatureRef => \$signature, DefaultRef => \$Default, MessageRef => \$message );
% if (RT->Config->Get("SignatureAboveQuote", $session{'CurrentUser'})) {

commit c7b4e3ffd797a88cf266ab9451d53ded5ba52244
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 03:34:44 2019 +0800

Fix font color for focused bottons on Chrome

On Chrome, if you click a button(like Reset), and then move mouse out of
it, the color of the button text will weirdly change from white to
black. This commit is to fix this issue by adding style for :focus

diff --git a/share/static/css/elevator-light/forms.css b/share/static/css/elevator-light/forms.css
index 6645bd637..c54e682ef 100644
--- a/share/static/css/elevator-light/forms.css
+++ b/share/static/css/elevator-light/forms.css
@@ -57,6 +57,7 @@ select { font-size: 1.0em }

.button,
.button:visited,
+.button:focus,
input[type=reset],
input[type=submit],
input[class=button],

commit 96cbfdb72904c25d76082ba866f54873a86f8721
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 03:58:37 2019 +0800

Fix typo of contorl => control

diff --git a/share/html/Elements/SelectCustomFieldOperator b/share/html/Elements/SelectCustomFieldOperator
index f200abe5d..a46955c0c 100644
--- a/share/html/Elements/SelectCustomFieldOperator
+++ b/share/html/Elements/SelectCustomFieldOperator
@@ -45,7 +45,7 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<select name="<% $Name %>" class="form-contorl selectpicker">
+<select name="<% $Name %>" class="form-control selectpicker">
% while (my $option = shift @Options) {
% my $value = shift @Values;
<option value="<% $value %>"

commit 49f86d995ba8aaee40e9e6b347a20b7a3516e21e
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 04:02:47 2019 +0800

Migrate submit button on search results page to elevator themes

diff --git a/share/html/Search/Results.html b/share/html/Search/Results.html
index 1d3c81513..be50ecdea 100644
--- a/share/html/Search/Results.html
+++ b/share/html/Search/Results.html
@@ -86,7 +86,11 @@
<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 form-control" value="<&|/l&>Change</&>" />
+ </div>
+</div>
</form>
</div>


commit 48e20271da0e1d6b232e4331943759e8642db5c6
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 04:57:12 2019 +0800

Migrate ShortcutHelp to new elevator themes

diff --git a/share/html/Elements/ShortcutHelp b/share/html/Elements/ShortcutHelp
index d3c4ecf48..d5e431386 100644
--- a/share/html/Elements/ShortcutHelp
+++ b/share/html/Elements/ShortcutHelp
@@ -52,94 +52,102 @@ $show_ticket_reply => 0
$show_ticket_comment => 0
</%args>

-<div class="keyboard-shortcuts">
- <h2><&|/l&>Keyboard Shortcuts</&></h2>
+<div class="modal-dialog modal-dialog-centered" role="document">
+ <div class="modal-content">
+ <div class="modal-body">

- <div class="titlebox">
- <div class="titlebox-title">
- <span class="left"><&|/l&>Global</&></span>
- <span class="right-empty"></span>
- </div>
- <div class="titlebox-content">
- <hr class="clear">
- <table>
- <tr>
- <td class="key-column"><span class="keyboard-shortcuts-key">/</span></td>
- <td><&|/l&>Quick search</&></td>
- </tr>
- <tr>
- <td><span class="keyboard-shortcuts-key">gh</span></td>
- <td><&|/l&>Return home</&></td>
- </tr>
- <tr>
- <td><span class="keyboard-shortcuts-key">gb</span> <span class="keyboard-shortcuts-separator">/</span> <span class="keyboard-shortcuts-key">gf</span></td>
- <td><&|/l&>Go back / forward</&></td>
- </tr>
- </table>
- </div>
- </div>
+ <div class="keyboard-shortcuts">
+ <h2><&|/l&>Keyboard Shortcuts</&></h2>
+
+ <div class="titlebox">
+ <div class="titlebox-title">
+ <span class="left"><&|/l&>Global</&></span>
+ <span class="right-empty"></span>
+ </div>
+ <div class="titlebox-content">
+ <hr class="clear">
+ <table>
+ <tr>
+ <td class="key-column"><span class="keyboard-shortcuts-key">/</span></td>
+ <td><&|/l&>Quick search</&></td>
+ </tr>
+ <tr>
+ <td><span class="keyboard-shortcuts-key">gh</span></td>
+ <td><&|/l&>Return home</&></td>
+ </tr>
+ <tr>
+ <td><span class="keyboard-shortcuts-key">gb</span> <span class="keyboard-shortcuts-separator">/</span> <span class="keyboard-shortcuts-key">gf</span></td>
+ <td><&|/l&>Go back / forward</&></td>
+ </tr>
+ </table>
+ </div>
+ </div>

% if($show_search) {

- <div class="titlebox">
- <div class="titlebox-title">
- <span class="left"><&|/l&>Search</&></span>
- <span class="right-empty"></span>
- </div>
- <div class="titlebox-content">
- <hr class="clear">
- <table>
- <tr>
- <td class="key-column"><span class="keyboard-shortcuts-key">k</span><span class="keyboard-shortcuts-separator"> / </span><span class="keyboard-shortcuts-key">j</span></td>
- <td><&|/l&>Move up / down the list of results</&></td>
- </tr>
- <tr>
- <td><span class="keyboard-shortcuts-key">o</span> <span class="keyboard-shortcuts-separator">or</span> <span class="keyboard-shortcuts-key">&lt;<&|/l&>Enter</&>&gt;</span></td>
- <td><&|/l&>View highlighted ticket</&></td>
- </tr>
- <tr>
- <td class="key-column"><span class="keyboard-shortcuts-key">r</span></td>
- <td><&|/l&>Reply to ticket</&></td>
- </tr>
- <tr>
- <td><span class="keyboard-shortcuts-key">c</span></td>
- <td><&|/l&>Comment on ticket</&></td>
- </tr>
+ <div class="titlebox">
+ <div class="titlebox-title">
+ <span class="left"><&|/l&>Search</&></span>
+ <span class="right-empty"></span>
+ </div>
+ <div class="titlebox-content">
+ <hr class="clear">
+ <table>
+ <tr>
+ <td class="key-column"><span class="keyboard-shortcuts-key">k</span><span class="keyboard-shortcuts-separator"> / </span><span class="keyboard-shortcuts-key">j</span></td>
+ <td><&|/l&>Move up / down the list of results</&></td>
+ </tr>
+ <tr>
+ <td><span class="keyboard-shortcuts-key">o</span> <span class="keyboard-shortcuts-separator">or</span> <span class="keyboard-shortcuts-key">&lt;<&|/l&>Enter</&>&gt;</span></td>
+ <td><&|/l&>View highlighted ticket</&></td>
+ </tr>
+ <tr>
+ <td class="key-column"><span class="keyboard-shortcuts-key">r</span></td>
+ <td><&|/l&>Reply to ticket</&></td>
+ </tr>
+ <tr>
+ <td><span class="keyboard-shortcuts-key">c</span></td>
+ <td><&|/l&>Comment on ticket</&></td>
+ </tr>
% if($show_bulk_update) {
- <tr>
- <td><span class="keyboard-shortcuts-key">x</span></td>
- <td><&|/l&>Toggle highlighted ticket's checkbox</&></td>
- </tr>
+ <tr>
+ <td><span class="keyboard-shortcuts-key">x</span></td>
+ <td><&|/l&>Toggle highlighted ticket's checkbox</&></td>
+ </tr>
% }
- </table>
- </div>
- </div>
+ </table>
+ </div>
+ </div>

% }

% if ($show_ticket_reply || $show_ticket_comment) {
- <div class="titlebox">
- <div class="titlebox-title">
- <span class="left"><&|/l&>Ticket</&></span>
- <span class="right-empty"></span>
- </div>
- <div class="titlebox-content">
- <hr class="clear">
- <table>
+ <div class="titlebox">
+ <div class="titlebox-title">
+ <span class="left"><&|/l&>Ticket</&></span>
+ <span class="right-empty"></span>
+ </div>
+ <div class="titlebox-content">
+ <hr class="clear">
+ <table>
% if ( $show_ticket_reply ) {
- <tr>
- <td class="key-column"><span class="keyboard-shortcuts-key">r</span></td>
- <td><&|/l&>Reply to current ticket</&></td>
- </tr>
+ <tr>
+ <td class="key-column"><span class="keyboard-shortcuts-key">r</span></td>
+ <td><&|/l&>Reply to current ticket</&></td>
+ </tr>
% }
% if ( $show_ticket_comment ) {
- <tr>
- <td class="key-column"><span class="keyboard-shortcuts-key">c</span></td>
- <td><&|/l&>Comment on current ticket</&></td>
- </tr>
+ <tr>
+ <td class="key-column"><span class="keyboard-shortcuts-key">c</span></td>
+ <td><&|/l&>Comment on current ticket</&></td>
+ </tr>
% }
- </table>
- </div>
- </div>
+ </table>
+ </div>
+ </div>
% }
+ </div>
+
+ </div>
+ </div>
</div>

commit c94e5e152d8c0792c68f1b534fcf9429d3a18c70
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 05:01:14 2019 +0800

Fix label width for gnupg widget on ticket forward page

diff --git a/share/html/Ticket/Forward.html b/share/html/Ticket/Forward.html
index c7a12f926..42bbc9d14 100644
--- a/share/html/Ticket/Forward.html
+++ b/share/html/Ticket/Forward.html
@@ -87,7 +87,7 @@

% if ( $gnupg_widget ) {
<div class="form-row">
- <span class="label empty">&nbsp;</span>
+ <span class="label col-md-3 empty">&nbsp;</span>
<div class="value col-md-9">
<& /Elements/Crypt/SignEncryptWidget,
self => $gnupg_widget,

commit 4c9a567c75a73cee0aea3a07830e586e543cc517
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 23:41:46 2019 +0800

Migrate time input and unit "minutes" to input group on MyDay

Input group' looking is much nicer.

diff --git a/share/html/Tools/MyDay.html b/share/html/Tools/MyDay.html
index edc697568..1eaa996d3 100644
--- a/share/html/Tools/MyDay.html
+++ b/share/html/Tools/MyDay.html
@@ -70,9 +70,13 @@
<div class="col-md-3 label">
<&|/l&>Worked</&>:
</div>
- <div class="col-md-9 form-inline value">
- <input class="form-control" type="text" size="3" name="UpdateTimeWorked-<%$Ticket->Id%>" />
- <&|/l&>minutes</&>
+ <div class="col-md-auto value">
+ <div class="input-group mb-3">
+ <input class="form-control" type="text" size="3" name="UpdateTimeWorked-<%$Ticket->Id%>" />
+ <div class="input-group-append">
+ <span class="input-group-text"><&|/l&>minutes</&></span>
+ </div>
+ </div>
</div>
</div>


commit e039bbcda9bcde201092e99ff33fc3a270e43a5e
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 23:43:35 2019 +0800

Fix comments inputs on MyDay

There was a missed "form-row" div

diff --git a/share/html/Tools/MyDay.html b/share/html/Tools/MyDay.html
index 1eaa996d3..804168c6b 100644
--- a/share/html/Tools/MyDay.html
+++ b/share/html/Tools/MyDay.html
@@ -91,11 +91,13 @@
</div>

<div class="col-md-6">
- <div class="label col-md-3">
- <&|/l&>Comments</&>:
- </div>
- <div class="col-md-9 value">
- <textarea class="form-control" name="UpdateContent-<%$Ticket->Id%>" rows="5" cols="60"></textarea>
+ <div class="form-row">
+ <div class="label col-md-3">
+ <&|/l&>Comments</&>:
+ </div>
+ <div class="col-md-9 value">
+ <textarea class="form-control" name="UpdateContent-<%$Ticket->Id%>" rows="5" cols="60"></textarea>
+ </div>
</div>
</div>
</div>

commit 39300a4d7f55ce41736871c12856645e116e9a49
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 23:45:27 2019 +0800

Smaller status select input on MyDay

There are only 2 inputs(worked time and status) in the column and since
worked time is not full-width, there is no reason to keep status select
full-width either.

diff --git a/share/html/Tools/MyDay.html b/share/html/Tools/MyDay.html
index 804168c6b..edb708d18 100644
--- a/share/html/Tools/MyDay.html
+++ b/share/html/Tools/MyDay.html
@@ -84,7 +84,7 @@
<div class="label col-md-3">
<&|/l&>Status</&>:
</div>
- <div class="col-md-9 value">
+ <div class="col-md-auto value">
<& /Ticket/Elements/SelectStatus, Name=> 'UpdateStatus-'.$Ticket->Id, TicketObj => $Ticket &>
</div>
</div>

commit ffe0864fcfa8890702eba5896be3384d6592d0e5
Author: sunnavy <sunnavy@bestpractical.com>
Date: Tue Aug 20 23:46:53 2019 +0800

Migrate modals to new elevator themes

diff --git a/share/html/Asset/Helpers/CreateInCatalog b/share/html/Asset/Helpers/CreateInCatalog
index b986e4712..66c261a02 100644
--- a/share/html/Asset/Helpers/CreateInCatalog
+++ b/share/html/Asset/Helpers/CreateInCatalog
@@ -47,6 +47,12 @@
%# END BPS TAGGED BLOCK }}}
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
+ <div class="modal-header">
+ <h5 class="modal-title"><&|/l&>Create Asset</&></h5>
+ <a href="javascript:void(0)" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </a>
+ </div>
<div class="modal-body">
<& /Asset/Elements/CreateInCatalog &>
</div>
diff --git a/share/html/Asset/Helpers/CreateLinkedTicket b/share/html/Asset/Helpers/CreateLinkedTicket
index 9b3429884..a77c09b2a 100644
--- a/share/html/Asset/Helpers/CreateLinkedTicket
+++ b/share/html/Asset/Helpers/CreateLinkedTicket
@@ -62,6 +62,12 @@ elsif ( $Asset ){
</%init>
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
+ <div class="modal-header">
+ <h5 class="modal-title"><&|/l&>Create Linked Ticket</&></h5>
+ <a href="javascript:void(0)" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </a>
+ </div>
<div class="modal-body">
<& /Asset/Elements/CreateLinkedTicket, AssetObj => \@asset_objs, Requestors => $Requestors &>
</div>
diff --git a/share/html/Elements/ShortcutHelp b/share/html/Elements/ShortcutHelp
index d5e431386..aa68c3326 100644
--- a/share/html/Elements/ShortcutHelp
+++ b/share/html/Elements/ShortcutHelp
@@ -54,11 +54,15 @@ $show_ticket_comment => 0

<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
+ <div class="modal-header">
+ <h5 class="modal-title"><&|/l&>Keyboard Shortcuts</&></h5>
+ <a href="javascript:void(0)" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </a>
+ </div>
<div class="modal-body">

<div class="keyboard-shortcuts">
- <h2><&|/l&>Keyboard Shortcuts</&></h2>
-
<div class="titlebox">
<div class="titlebox-title">
<span class="left"><&|/l&>Global</&></span>
diff --git a/share/static/js/assets.js b/share/static/js/assets.js
index 8691be134..6c03b9651 100644
--- a/share/static/js/assets.js
+++ b/share/static/js/assets.js
@@ -1,13 +1,14 @@
jQuery(function() {
var showModal = function(html) {
- jQuery("<div class='modal'></div>")
- .append(html).appendTo("body")
- .bind('modal:close', function(ev,modal) { modal.elm.remove(); })
- .modal();
+ var modal = jQuery("<div class='modal'></div>");
+ modal.append(html).appendTo("body");
+ modal.bind('modal:close', function(ev) { modal.remove(); })
+ modal.on('hide.bs.modal', function(ev) { modal.remove(); })
+ modal.modal('show');

- // We need to refresh the select picker plugin on AJAX calls
- // since the plugin only runs on page load.
- jQuery('.selectpicker').selectpicker('refresh');
+ // We need to refresh the select picker plugin on AJAX calls
+ // since the plugin only runs on page load.
+ jQuery('.selectpicker').selectpicker('refresh');
};

var assets = jQuery("#assets-accordion");
diff --git a/share/static/js/keyboard-shortcuts.js b/share/static/js/keyboard-shortcuts.js
index 22dc962bb..8cfa2896e 100644
--- a/share/static/js/keyboard-shortcuts.js
+++ b/share/static/js/keyboard-shortcuts.js
@@ -56,10 +56,11 @@ jQuery(function() {
};

var showModal = function(html) {
- jQuery("<div class='modal'></div>")
- .append(html).appendTo("body")
- .bind('modal:close', function(ev,modal) { modal.elm.remove(); })
- .modal();
+ var modal = jQuery("<div class='modal'></div>");
+ modal.append(html).appendTo("body");
+ modal.bind('modal:close', function() { modal.remove(); })
+ modal.on('hide.bs.modal', function() { modal.remove(); })
+ modal.modal('show');
};

Mousetrap.bind('g b', goBack);
diff --git a/share/static/js/util.js b/share/static/js/util.js
index e9bb4c307..992fd78c5 100644
--- a/share/static/js/util.js
+++ b/share/static/js/util.js
@@ -36,10 +36,11 @@ function toggle_upgrade_history(widget, selector) {
}

var showModal = function(html) {
- jQuery("<div class='modal'></div>")
- .append(html).appendTo("body")
- .bind('modal:close', function(ev,modal) { modal.elm.remove(); })
- .modal();
+ var modal = jQuery("<div class='modal'></div>");
+ modal.append(html).appendTo("body");
+ modal.bind('modal:close', function(ev) { modal.remove(); })
+ modal.on('hide.bs.modal', function(ev) { modal.remove(); })
+ modal.modal('show');
};

/* Classes */

commit 755710c1ce816e94f96f96bb74fdb224635d09a0
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 00:00:21 2019 +0800

Fix unbalanced div/span in ShowLinks

diff --git a/share/html/Elements/ShowLinks b/share/html/Elements/ShowLinks
index 914ca1925..cd9b83ed2 100644
--- a/share/html/Elements/ShowLinks
+++ b/share/html/Elements/ShowLinks
@@ -51,9 +51,9 @@
<div class="label col-md-3">
<& ShowRelationLabel, Object => $Object, Label => $labels{$type}.':', Relation => $type &>
% if ($clone{$type}) {
- <span class="create">(<a href="<% $clone{$type} %>"><% loc('Create') %></a>)</div>
+ <span class="create">(<a href="<% $clone{$type} %>"><% loc('Create') %></a>)</span>
% }
- </span>
+ </div>
<div class="value col-md-9"><span class="form-control current-value">
<& ShowLinksOfType, Object => $Object, Type => $type, Recurse => ($type eq 'Members') &>
</span></div>

commit dcec171c6005d0c9d5f4052a16fae064a7ff0176
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 01:54:23 2019 +0800

Fix unbalanced div for ShowPeople of Asset

diff --git a/share/html/Asset/Elements/ShowPeople b/share/html/Asset/Elements/ShowPeople
index 87dc92c3f..3ffd2a931 100644
--- a/share/html/Asset/Elements/ShowPeople
+++ b/share/html/Asset/Elements/ShowPeople
@@ -62,19 +62,17 @@ my $CatalogObj = $AssetObj->CatalogObj;
% my $user = $users->Next;
<div class="col-md-9 value">
<& /Elements/ShowUser, User => $user, Link => 1 &>
-% if ( $user->id == RT->Nobody->id ) {
-% next;
+% if ( $user->id != RT->Nobody->id ) {
+ <& ShowRoleMembers, Group => $AssetObj->RoleGroup($role), Title => 0 &>
% }
- <& ShowRoleMembers, Group => $AssetObj->RoleGroup($role), Title => 0 &>
</div>
- </div>
% } else {
<div class="user-accordion col-md-9">
<& ShowRoleMembers, Group => $AssetObj->RoleGroup($role) &>
<& ShowRoleMembers, Group => $CatalogObj->RoleGroup($role), Skip => $AssetObj->RoleGroup($role), Note => loc("(via this asset's catalog)") &>
</div>
- </div>
% }
+ </div>
% }

<& /Elements/ShowCustomFields, Object => $AssetObj, Grouping => 'People', Table => 0 &>

commit 99d0a7d5b9c35bc7a9663671249a5008a12fc0ac
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 03:24:25 2019 +0800

Migrate width/height inputs to nicer input groups on chart page

diff --git a/share/html/Search/Chart.html b/share/html/Search/Chart.html
index aeb586b9d..5ba533a20 100644
--- a/share/html/Search/Chart.html
+++ b/share/html/Search/Chart.html
@@ -191,20 +191,24 @@ $m->callback( ARGSRef => \%ARGS, QueryArgsRef => \%query );
<label><% loc("Width") %>:</label>
</div>
<div class="col-md-auto value">
- <input class="form-control" type="text" name="Width" value="<% $query{'Width'} || q{} %>">
- </div>
- <div class="col-md-auto label">
- <% loc("px") %>
+ <div class="input-group mb-3">
+ <input class="form-control" type="text" name="Width" value="<% $query{'Width'} || q{} %>">
+ <div class="input-group-append">
+ <span class="input-group-text"><&|/l&>px</&></span>
+ </div>
+ </div>
</div>
<div class="col-md-auto label">
&#x00d7;
<label><% loc("Height") %>:</label>
</div>
<div class="col-md-auto value">
- <input class="form-control" type="text" name="Height" value="<% $query{'Height'} || q{} %>">
- </div>
- <div class="col-md-auto label">
- <% loc("px") %>
+ <div class="input-group mb-3">
+ <input class="form-control" type="text" name="Height" value="<% $query{'Height'} || q{} %>">
+ <div class="input-group-append">
+ <span class="input-group-text"><&|/l&>px</&></span>
+ </div>
+ </div>
</div>
</div>
<div class="include-table custom-control custom-checkbox">

commit ae3e024b65a6b46c192ff15604866737819ccb4c
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 03:34:45 2019 +0800

Simplify SQL chart style output

The new added structure split the content into at least 2 rows(label
itself took one row), which is not necessary. The original version is
generally better.

Note that div.query is in div.chart-wrapper in original version. This
commit reverts back to it and reuses the same style in old themes.

diff --git a/share/html/Search/Elements/Chart b/share/html/Search/Elements/Chart
index f8d8038c8..d1d52f6b7 100644
--- a/share/html/Search/Elements/Chart
+++ b/share/html/Search/Elements/Chart
@@ -66,7 +66,8 @@ $report->SortEntries;

my $query_string = $m->comp('/Elements/QueryString', %ARGS, GroupBy => \@GroupBy );
</%init>
-<div class="chart-wrapper form-row">
+<div class="chart-wrapper">
+<div class="form-row">
<div class="col-md-auto">
% if ( ($ChartStyle || '') =~ /\b(pie|bar)\b/ ) {
<span class="chart image <% $1 %>">
@@ -89,10 +90,8 @@ my $query_string = $m->comp('/Elements/QueryString', %ARGS, GroupBy => \@GroupBy
% $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"><div class="label col-md-3"><% loc('Query') %>:</div><div class="value col-md-9"><% $Query %></div></div>
+<div class="query"><span class="label"><% loc('Query') %>:</span><span class="value"><% $Query %></span></div>
% }
</div>
-</div>
diff --git a/share/static/css/elevator-light/ticket-lists.css b/share/static/css/elevator-light/ticket-lists.css
index 837db5604..405f01bc9 100644
--- a/share/static/css/elevator-light/ticket-lists.css
+++ b/share/static/css/elevator-light/ticket-lists.css
@@ -32,3 +32,10 @@ table.queue-summary th.collection-as-table a {
table.queue-summary th.collection-as-table {
text-align: right
}
+
+.chart-wrapper .query {
+ clear: both;
+ text-align: center;
+ font-size: 1.2em;
+ padding: 1em;
+}

commit d03ed2a309d15b43f7b8f9ea3e0a2d1e39ff39cf
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 04:25:45 2019 +0800

Fix unbalanced div on article create page

diff --git a/share/html/Articles/Article/Elements/EditBasics b/share/html/Articles/Article/Elements/EditBasics
index bc29079cc..b3d2eccd8 100644
--- a/share/html/Articles/Article/Elements/EditBasics
+++ b/share/html/Articles/Article/Elements/EditBasics
@@ -74,9 +74,9 @@
% }
</div>
</div>
+% if ($ARGS{'id'} ne 'new') {
<div class="form-row">
<div class="col-md-3 label">
-% if ($ARGS{'id'} ne 'new') {
<&|/l&>Creator</&>:
</div>
<div class="col-md-9 value">

commit a8f6a41334facdab63a7282890961b3354ecfebe
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 04:29:14 2019 +0800

Add missed form-control class to simple search button

This could make the button height the same as the text input

diff --git a/share/html/Search/Simple.html b/share/html/Search/Simple.html
index 676265d87..4b7f44014 100644
--- a/share/html/Search/Simple.html
+++ b/share/html/Search/Simple.html
@@ -59,7 +59,7 @@
<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</&>" />
+ <input type="submit" class="button btn btn-primary form-control" value="<&|/l&>Search</&>" />
</div>
</div>


commit 529944d7f435c26ea52f737ca2c615d7feae5bd9
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 04:46:13 2019 +0800

Migrate /User/Search.html to elevator themes

diff --git a/share/html/Elements/GotoUser b/share/html/Elements/GotoUser
index 1ca3af481..9b6dae780 100644
--- a/share/html/Elements/GotoUser
+++ b/share/html/Elements/GotoUser
@@ -46,7 +46,14 @@
%#
%# END BPS TAGGED BLOCK }}}
<form name="UserSearch" method="post" action="<% RT->Config->Get('WebPath') %>/User/Search.html">
-<input type="text" name="UserString" value="<% $Default %>" data-autocomplete="Users" data-autocomplete-return="Name" id="autocomplete-UserString" />
+ <div class="form-row justify-content-center">
+ <div class="col-md-4">
+ <input type="text" class="form-control" name="UserString" value="<% $Default %>" data-autocomplete="Users" data-autocomplete-return="Name" id="autocomplete-UserString" />
+ </div>
+ <div class="col-md-auto">
+ <input type="submit" name="UserSearch" value="<&|/l&>Search</&>" class="button btn btn-primary form-control" />
+ </div>
+ </div>
<script type="text/javascript">
jQuery(function(){
// Jump directly to the page if a user is chosen
@@ -55,7 +62,6 @@ jQuery(function(){
});
});
</script>
-<input type="submit" name="UserSearch" value="<&|/l&>Search</&>" class="button" />
</form>
<%ARGS>
$Default => ''
diff --git a/share/html/User/Search.html b/share/html/User/Search.html
index 4fb2d9cb7..6e4377401 100644
--- a/share/html/User/Search.html
+++ b/share/html/User/Search.html
@@ -50,7 +50,11 @@

<& /Elements/GotoUser, Default => $UserString||'' &>

-<p> <&|/l&>This will search for users by looking in the following fields:</&> <% $search_fields %></p>
+<div class="form-row text-center">
+ <div class="col-md-12">
+ <&|/l&>This will search for users by looking in the following fields:</&> <% $search_fields %>
+ </div>
+</div>

% if ($UserString) {


commit a120e7d30434146fe1f7ca6b4d781c4ed829879f
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 05:05:04 2019 +0800

Migrate /Articles/Topics.html to elevator themes

diff --git a/share/html/Articles/Elements/ShowTopic b/share/html/Articles/Elements/ShowTopic
index 51d923f98..b7d75ba32 100644
--- a/share/html/Articles/Elements/ShowTopic
+++ b/share/html/Articles/Elements/ShowTopic
@@ -48,11 +48,18 @@
% for (@path) {
%# this isn't always a class, it can be the system object
% my $class_id = ($_->ObjectType eq 'RT::Class' ? $_->ObjectId : 0 );
-<% $_->ParentObj->Id ? " > " : "" %><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $class_id %>&id=<% $_->Id %>"><% $_->Name || loc("(no name)") %></a>
+% if ( $InBreadcrumb ) {
+<li class="breadcrumb-item">
+ <a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $class_id %>&id=<% $_->Id %>"><% $_->Name || loc("(no name)") %></a>
+</li>
+% } else {
+ <% $_->ParentObj->Id ? " > " : "" %><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $class_id %>&id=<% $_->Id %>"><% $_->Name || loc("(no name)") %></a>
+% }
% }

<%args>
$topic
+$InBreadcrumb => 0
</%args>

<%init>
diff --git a/share/html/Articles/Topics.html b/share/html/Articles/Topics.html
index c5a8913ec..a79cf7a85 100644
--- a/share/html/Articles/Topics.html
+++ b/share/html/Articles/Topics.html
@@ -48,18 +48,25 @@
<& /Elements/Header, Title => loc('Browse by topic') &>
<& /Elements/Tabs &>

-<a href="Topics.html"><&|/l&>All topics</&></a>
+<nav aria-label="breadcrumb">
+ <ol class="breadcrumb">
+ <li class="breadcrumb-item">
+ <a href="Topics.html"><&|/l&>All topics</&></a>
+ </li>
% if (defined $class) {
-&gt; <a href="Topics.html?class=<%$currclass_id%>"><% $currclass_name %></a>
+ <li class="breadcrumb-item">
+ <a href="Topics.html?class=<%$currclass_id%>"><% $currclass_name %></a>
+ </li>
% }

% if ($id != 0) {
-&gt; <& /Articles/Elements/ShowTopic, topic => $currtopic &>
+<& /Articles/Elements/ShowTopic, topic => $currtopic, InBreadcrumb => 1 &>
% }
-<br />
-<h1><&|/l&>Browse by topic</&></h1>
+ </ol>
+</nav>
+
% if (defined $class) {
-<h2><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $currclass_id %>"><% $currclass_name %></a></h2>
+<h5><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $currclass_id %>"><% $currclass_name %></a></h5>
% my $rtopic = RT::Topic->new( $session{'CurrentUser'} );
% $rtopic->Load($id);
% unless ( $rtopic->Id()
@@ -86,9 +93,9 @@
% } else {
<ul class="list-group list-group-compact">
% while (my $c = $Classes->Next) {
-<li class="list-group-item"><h2><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $c->Id %>"><% $c->Name %></a></h2></li>
+<li class="list-group-item"><h5><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $c->Id %>"><% $c->Name %></a></h5></li>
% }
-<li class="list-group-item"><h2><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=0"><&|/l&>Global Topics</&></a></h2></li>
+<li class="list-group-item"><h5><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=0"><&|/l&>Global Topics</&></a></h5></li>
</ul>
% }

@@ -96,7 +103,7 @@

% if (@articles) {
% if ($id) {
-<h2><&|/l, $currtopic->Name&>Articles in [_1]</&></h2>
+<h5><&|/l, $currtopic->Name&>Articles in [_1]</&></h5>
% } elsif ($class) {
<h2><&|/l&>Articles with no topics</&></h2>
% }

commit 20e63faf34e73748cb4fae60cf65840b169f76a0
Author: sunnavy <sunnavy@bestpractical.com>
Date: Wed Aug 21 05:09:18 2019 +0800

Avoid duplicated form-row/col-... divs on article class modify page

diff --git a/share/html/Admin/Articles/Classes/Modify.html b/share/html/Admin/Articles/Classes/Modify.html
index 201af3c42..713964388 100644
--- a/share/html/Admin/Articles/Classes/Modify.html
+++ b/share/html/Admin/Articles/Classes/Modify.html
@@ -165,19 +165,13 @@
<h3><&|/l&>Change email subject:</&></h3>
<p><&|/l&>If a Custom Field is selected, the Subject of your outgoing email will be overridden by this article.</&></p>

- <div class="form-row">
- <div class="col-md-3 label">
- </div>
- <div class="col-md-9 value">
- <& /Widgets/Form/Select,
- Name => 'SubjectOverride',
- DefaultLabel => loc('No Subject Override'),
- Values => $subject_cfs,
- ValuesLabel => $subject_cf_labels,
- CurrentValue => $ClassObj->SubjectOverride,
- &>
- </div>
- </div>
+ <& /Widgets/Form/Select,
+ Name => 'SubjectOverride',
+ DefaultLabel => loc('No Subject Override'),
+ Values => $subject_cfs,
+ ValuesLabel => $subject_cf_labels,
+ CurrentValue => $ClassObj->SubjectOverride,
+ &>
% }

%$m->callback( CallbackName => 'BeforeSubmit', CustomFields => $cfs, ClassObj => $ClassObj );

-----------------------------------------------------------------------
_______________________________________________
rt-commit mailing list
rt-commit@lists.bestpractical.com
http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit