Patch #32813 » 0001-Unify-processing-for-switching-multiple-selections.patch
app/views/workflows/edit.html.erb | ||
---|---|---|
15 | 15 |
<p> |
16 | 16 |
<label><%=l(:label_role)%>: |
17 | 17 |
<%= options_for_workflow_select 'role_id[]', Role.sorted.select(&:consider_workflow?), @roles, :id => 'role_id', :class => 'expandable' %> |
18 |
<span class="toggle-multiselect icon-only"></span> |
|
18 | 19 |
</label> |
19 |
<a href="#" data-expands="#role_id"><span class="toggle-multiselect icon-only icon-toggle-plus"></span></a> |
|
20 | 20 | |
21 | 21 |
<label><%=l(:label_tracker)%>: |
22 | 22 |
<%= options_for_workflow_select 'tracker_id[]', Tracker.sorted, @trackers, :id => 'tracker_id', :class => 'expandable' %> |
23 |
<span class="toggle-multiselect icon-only"></span> |
|
23 | 24 |
</label> |
24 |
<a href="#" data-expands="#tracker_id"><span class="toggle-multiselect icon-only icon-toggle-plus"></span></a> |
|
25 | 25 | |
26 | 26 |
<%= submit_tag l(:button_edit), :name => nil %> |
27 | 27 | |
... | ... | |
57 | 57 |
</div> |
58 | 58 |
<%= submit_tag l(:button_save) %> |
59 | 59 |
<% end %> |
60 |
<% end %> |
|
61 | ||
62 |
<%= javascript_tag do %> |
|
63 |
$("a[data-expands]").click(function(e){ |
|
64 |
e.preventDefault(); |
|
65 |
var target = $($(this).attr("data-expands")); |
|
66 |
if (target.attr("multiple")) { |
|
67 |
$(this).find('span').switchClass('icon-toggle-minus', 'icon-toggle-plus'); |
|
68 |
target.attr("multiple", false); |
|
69 |
target.find("option[value=all]").show(); |
|
70 |
} else { |
|
71 |
$(this).find('span').switchClass('icon-toggle-plus', 'icon-toggle-minus'); |
|
72 |
target.attr("multiple", true); |
|
73 |
target.find("option[value=all]").attr("selected", false).hide(); |
|
74 |
} |
|
75 |
}); |
|
76 | ||
77 |
<% end %> |
|
60 |
<% end %> |
app/views/workflows/permissions.html.erb | ||
---|---|---|
15 | 15 |
<p> |
16 | 16 |
<label><%=l(:label_role)%>: |
17 | 17 |
<%= options_for_workflow_select 'role_id[]', Role.sorted.select(&:consider_workflow?), @roles, :id => 'role_id', :class => 'expandable' %> |
18 |
<span class="toggle-multiselect icon-only"></span> |
|
18 | 19 |
</label> |
19 |
<a href="#" data-expands="#role_id"><span class="toggle-multiselect icon-only icon-toggle-plus"></span></a> |
|
20 | 20 | |
21 | 21 |
<label><%=l(:label_tracker)%>: |
22 | 22 |
<%= options_for_workflow_select 'tracker_id[]', Tracker.sorted, @trackers, :id => 'tracker_id', :class => 'expandable' %> |
23 |
<span class="toggle-multiselect icon-only"></span> |
|
23 | 24 |
</label> |
24 |
<a href="#" data-expands="#tracker_id"><span class="toggle-multiselect icon-only icon-toggle-plus"></span></a> |
|
25 | ||
26 | 25 |
<%= submit_tag l(:button_edit), :name => nil %> |
27 | 26 | |
28 | 27 |
<%= hidden_field_tag 'used_statuses_only', '0', :id => nil %> |
... | ... | |
107 | 106 |
var selected = td.find("select").find(":selected").val(); |
108 | 107 |
td.nextAll('td').find("select").val(selected); |
109 | 108 |
}); |
110 | ||
111 |
$("a[data-expands]").click(function(e){ |
|
112 |
e.preventDefault(); |
|
113 |
var target = $($(this).attr("data-expands")); |
|
114 |
if (target.attr("multiple")) { |
|
115 |
$(this).find('span').switchClass('icon-toggle-minus', 'icon-toggle-plus'); |
|
116 |
target.attr("multiple", false); |
|
117 |
target.find("option[value=all]").show(); |
|
118 |
} else { |
|
119 |
$(this).find('span').switchClass('icon-toggle-plus', 'icon-toggle-minus'); |
|
120 |
target.attr("multiple", true); |
|
121 |
target.find("option[value=all]").attr("selected", false).hide(); |
|
122 |
} |
|
123 |
}); |
|
124 | ||
125 | 109 |
<% end %> |
public/javascripts/application.js | ||
---|---|---|
120 | 120 |
$('#filters-table').on('click', 'td.field input[type=checkbox]', function() { |
121 | 121 |
toggleFilter($(this).val()); |
122 | 122 |
}); |
123 |
$('#filters-table').on('click', '.toggle-multiselect', function() { |
|
124 |
toggleMultiSelect($(this).siblings('select')) |
|
125 |
$(this).toggleClass('icon-toggle-plus icon-toggle-minus') |
|
126 |
}); |
|
127 | 123 |
$('#filters-table').on('keypress', 'input[type=text]', function(e) { |
128 | 124 |
if (e.keyCode == 13) $(this).closest('form').submit(); |
129 | 125 |
}); |
... | ... | |
151 | 147 |
} |
152 | 148 |
$('#cb_'+fieldId).prop('checked', true); |
153 | 149 |
toggleFilter(field); |
150 |
toggleMultiSelectIconInit(); |
|
154 | 151 |
$('#add_filter_select').val('').find('option').each(function() { |
155 | 152 |
if ($(this).attr('value') == field) { |
156 | 153 |
$(this).attr('disabled', true); |
... | ... | |
189 | 186 |
case "list_subprojects": |
190 | 187 |
tr.find('td.values').append( |
191 | 188 |
'<span style="display:none;"><select class="value" id="values_'+fieldId+'_1" name="v['+field+'][]"></select>' + |
192 |
' <span class="toggle-multiselect icon-only icon-toggle-plus"> </span></span>'
|
|
189 |
' <span class="toggle-multiselect icon-only '+(values.length > 1 ? 'icon-toggle-minus' : 'icon-toggle-plus')+'"> </span></span>'
|
|
193 | 190 |
); |
194 | 191 |
select = tr.find('td.values select'); |
195 | 192 |
if (values.length > 1) { select.attr('multiple', true); } |
... | ... | |
336 | 333 |
} |
337 | 334 | |
338 | 335 |
function toggleMultiSelect(el) { |
336 |
var isWorkflow = el.closest('.controller-workflows'); |
|
339 | 337 |
if (el.attr('multiple')) { |
340 | 338 |
el.removeAttr('multiple'); |
339 |
if (isWorkflow) { el.find("option[value=all]").show(); } |
|
341 | 340 |
el.attr('size', 1); |
342 | 341 |
} else { |
343 | 342 |
el.attr('multiple', true); |
343 |
if (isWorkflow) { el.find("option[value=all]").attr("selected", false).hide(); } |
|
344 | 344 |
if (el.children().length > 10) |
345 | 345 |
el.attr('size', 10); |
346 | 346 |
else |
... | ... | |
891 | 891 |
function toggleDisabledInit() { |
892 | 892 |
$('input[data-disables], input[data-enables], input[data-shows]').each(toggleDisabledOnChange); |
893 | 893 |
} |
894 |
function toggleMultiSelectIconInit() { |
|
895 |
$('.toggle-multiselect:not(.icon-toggle-minus), .toggle-multiselect:not(.icon-toggle-plus)').each(function(){ |
|
896 |
if ($(this).siblings('select').find('option:selected').size() > 1){ |
|
897 |
$(this).addClass('icon-toggle-minus'); |
|
898 |
} else { |
|
899 |
$(this).addClass('icon-toggle-plus'); |
|
900 |
} |
|
901 |
}); |
|
902 |
} |
|
894 | 903 | |
895 | 904 |
function toggleNewObjectDropdown() { |
896 | 905 |
var dropdown = $('#new-object + ul.menu-children'); |
... | ... | |
931 | 940 |
$('#content').on('change', 'input[data-disables], input[data-enables], input[data-shows]', toggleDisabledOnChange); |
932 | 941 |
toggleDisabledInit(); |
933 | 942 | |
943 |
$('#content').on('click', '.toggle-multiselect', function() { |
|
944 |
toggleMultiSelect($(this).siblings('select')); |
|
945 |
$(this).toggleClass('icon-toggle-plus icon-toggle-minus'); |
|
946 |
}); |
|
947 |
toggleMultiSelectIconInit(); |
|
948 | ||
934 | 949 |
$('#history .tabs').on('click', 'a', function(e){ |
935 | 950 |
var tab = $(e.target).attr('id').replace('tab-',''); |
936 | 951 |
document.cookie = 'history_last_tab=' + tab |