Patch #41827 » v2_01_cf_name_limit_and_ui_fixes.patch
| app/models/custom_field.rb | ||
|---|---|---|
| 35 | 35 |
|
| 36 | 36 |
validates_presence_of :name, :field_format |
| 37 | 37 |
validates_uniqueness_of :name, :scope => :type, :case_sensitive => true |
| 38 |
validates_length_of :name, :maximum => 30
|
|
| 38 |
validates_length_of :name, maximum: 255
|
|
| 39 | 39 |
validates_length_of :regexp, maximum: 255 |
| 40 | 40 |
validates_inclusion_of :field_format, |
| 41 | 41 |
:in => proc {Redmine::FieldFormat.available_formats}
|
| /dev/null → db/migrate/20241016120800_change_custom_fields_name_limit.rb | ||
|---|---|---|
| 1 |
class ChangeCustomFieldsNameLimit < ActiveRecord::Migration[7.2] |
|
| 2 |
def up |
|
| 3 |
change_column :custom_fields, :name, :string, limit: 255, default: '' |
|
| 4 |
end |
|
| 5 |
|
|
| 6 |
def down |
|
| 7 |
change_column :custom_fields, :name, :string, limit: 30, default: '' |
|
| 8 |
end |
|
| 9 |
end |
|
| test/unit/custom_field_test.rb | ||
|---|---|---|
| 48 | 48 |
assert field.save |
| 49 | 49 |
end |
| 50 | 50 |
|
| 51 |
def test_name_should_be_validated |
|
| 52 |
field = CustomField.new(name: 'Very long custom field name' * 10, field_format: 'int') |
|
| 53 |
assert field.invalid? |
|
| 54 |
end |
|
| 55 |
|
|
| 51 | 56 |
def test_default_value_should_be_validated |
| 52 | 57 |
field = CustomField.new(:name => 'Test', :field_format => 'int') |
| 53 | 58 |
field.default_value = 'abc' |
| 54 |
- |
|
| app/assets/stylesheets/application.css | ||
|---|---|---|
| 520 | 520 |
#list-definition > div .field{
|
| 521 | 521 |
width: 160px; |
| 522 | 522 |
} |
| 523 |
.query-columns { max-width: min(58vw, 500px); }
|
|
| 523 | 524 |
.query-columns label {
|
| 524 | 525 |
display:block; |
| 525 | 526 |
} |
| ... | ... | |
| 529 | 530 |
} |
| 530 | 531 |
.query-columns select {
|
| 531 | 532 |
min-width:150px; |
| 533 |
width: 100%; |
|
| 534 |
} |
|
| 535 |
.query-columns select option {
|
|
| 536 |
overflow: hidden; |
|
| 537 |
text-overflow: ellipsis; |
|
| 538 |
} |
|
| 539 |
#query_form fieldset#options select#group_by, |
|
| 540 |
#query-form fieldset#options select#query_group_by {
|
|
| 541 |
max-width: 500px; |
|
| 542 |
width: 100%; |
|
| 543 |
} |
|
| 544 |
#query-form fieldset#sort select {
|
|
| 545 |
max-width:min(36vw, 500px); |
|
| 532 | 546 |
} |
| 533 | 547 |
|
| 534 | 548 |
.query-totals {text-align:right; margin-top:-2.3em; font-size: 93%;}
|
| ... | ... | |
| 762 | 776 |
} |
| 763 | 777 |
|
| 764 | 778 |
.add-filter {width:35%; float:right; text-align: right; vertical-align: top;}
|
| 779 |
.add-filter select { max-width: 70%; }
|
|
| 765 | 780 |
|
| 766 | 781 |
#issue_is_private_wrap {float:right; margin-right:1em;}
|
| 767 | 782 |
.toggle-multiselect { margin-right:5px; cursor:pointer;}
|
| 768 |
- |
|
| app/assets/javascripts/application-legacy.js | ||
|---|---|---|
| 128 | 128 |
|
| 129 | 129 |
// columns selection |
| 130 | 130 |
function moveOptions(theSelFrom, theSelTo) {
|
| 131 |
$(theSelFrom).find('option:selected').detach().prop("selected", false).appendTo($(theSelTo));
|
|
| 131 |
$(theSelFrom).find('option:selected').detach().prop("selected", false).appendTo($(theSelTo)).
|
|
| 132 |
filter('[title]').tooltip("close");
|
|
| 132 | 133 |
} |
| 133 | 134 |
|
| 134 | 135 |
function moveOptionUp(theSel) {
|
| ... | ... | |
| 1225 | 1226 |
} |
| 1226 | 1227 |
|
| 1227 | 1228 |
function setupHoverTooltips(container) {
|
| 1229 |
$(".js-overflow-to-tooltip").each(function () {
|
|
| 1230 |
const currentTitle = this.getAttribute('title');
|
|
| 1231 |
if ((this.scrollWidth > this.clientWidth || |
|
| 1232 |
this.scrollHeight > this.clientHeight) && |
|
| 1233 |
!currentTitle) {
|
|
| 1234 |
this.setAttribute('title', this.textContent);
|
|
| 1235 |
} |
|
| 1236 |
}); |
|
| 1237 |
|
|
| 1228 | 1238 |
$(container || 'body').find("[title]:not(.no-tooltip)").tooltip({
|
| 1229 | 1239 |
show: {
|
| 1230 | 1240 |
delay: 400 |
| ... | ... | |
| 1392 | 1402 |
button.click(function(e){
|
| 1393 | 1403 |
main.addClass("animate");
|
| 1394 | 1404 |
main.toggleClass('collapsedsidebar');
|
| 1405 |
setupHoverTooltips(); |
|
| 1395 | 1406 |
applyState(); |
| 1396 | 1407 |
e.preventDefault(); |
| 1397 | 1408 |
return false; |
| app/helpers/queries_helper.rb | ||
|---|---|---|
| 129 | 129 |
|
| 130 | 130 |
def query_available_inline_columns_options(query) |
| 131 | 131 |
(query.available_inline_columns - query.columns). |
| 132 |
reject(&:frozen?).collect {|column| [column.caption, column.name]}
|
|
| 132 |
reject(&:frozen?).collect {|column| column_select_option(column)}
|
|
| 133 | 133 |
end |
| 134 | 134 |
|
| 135 | 135 |
def query_selected_inline_columns_options(query) |
| 136 | 136 |
(query.inline_columns & query.available_inline_columns). |
| 137 |
reject(&:frozen?).collect {|column| [column.caption, column.name]}
|
|
| 137 |
reject(&:frozen?).collect {|column| column_select_option(column)}
|
|
| 138 |
end |
|
| 139 |
|
|
| 140 |
def column_select_option(column) |
|
| 141 |
[column.caption, column.name, {class: 'js-overflow-to-tooltip'}]
|
|
| 138 | 142 |
end |
| 139 | 143 |
|
| 140 | 144 |
def render_query_columns_selection(query, options={})
|
| app/views/my/blocks/_issues.erb | ||
|---|---|---|
| 1 | 1 |
<div class="contextual"> |
| 2 |
<%= link_to_function sprite_icon('settings', l(:label_options)), "$('##{block}-settings').toggle();", :class => 'icon-only icon-settings', :title => l(:label_options) %>
|
|
| 2 |
<%= link_to_function sprite_icon('settings', l(:label_options)), "$('##{block}-settings').toggle(); setupHoverTooltips();", :class => 'icon-only icon-settings', :title => l(:label_options) %>
|
|
| 3 | 3 |
</div> |
| 4 | 4 |
|
| 5 | 5 |
<h3> |
| app/views/queries/_query_form.html.erb | ||
|---|---|---|
| 16 | 16 |
|
| 17 | 17 |
<% if @query.available_columns.any? %> |
| 18 | 18 |
<fieldset id="options" class="collapsible collapsed"> |
| 19 |
<legend onclick="toggleFieldset(this);" class="icon icon-collapsed"> |
|
| 19 |
<legend onclick="toggleFieldset(this); setupHoverTooltips();" class="icon icon-collapsed">
|
|
| 20 | 20 |
<%= sprite_icon("angle-right", rtl: true) %>
|
| 21 | 21 |
<%= l(:label_options) %> |
| 22 | 22 |
</legend> |
| ... | ... | |
| 83 | 83 |
$('input[name=display_type]').change(function (e) {
|
| 84 | 84 |
if ($("#display_type_list").is(':checked')) {
|
| 85 | 85 |
$('table#list-definition').show();
|
| 86 |
setupHoverTooltips(); |
|
| 86 | 87 |
} else {
|
| 87 | 88 |
$('table#list-definition').hide();
|
| 88 | 89 |
} |
| 89 |
- |
|
| app/assets/stylesheets/application.css | ||
|---|---|---|
| 545 | 545 |
max-width:min(36vw, 500px); |
| 546 | 546 |
} |
| 547 | 547 |
|
| 548 |
.query-totals {text-align:right; margin-top:-2.3em; font-size: 93%;}
|
|
| 548 |
.query-totals {text-align:right; font-size: 93%;}
|
|
| 549 | 549 |
.query-totals>span:not(:first-child) {margin-left:0.6em;}
|
| 550 | 550 |
.query-totals .value {font-weight:bold;}
|
| 551 | 551 |
body.controller-timelog .query-totals {margin-top:initial;}
|
| 552 |
- |
|
| app/assets/javascripts/application-legacy.js | ||
|---|---|---|
| 1241 | 1241 |
}, |
| 1242 | 1242 |
position: {
|
| 1243 | 1243 |
my: "center bottom-5", |
| 1244 |
at: "center top" |
|
| 1244 |
at: "center top", |
|
| 1245 |
collision: "flipfit flip" |
|
| 1245 | 1246 |
} |
| 1246 | 1247 |
}); |
| 1247 | 1248 |
} |
| 1248 |
- |
|
- « Previous
- 1
- …
- 4
- 5
- 6
- Next »