]> source.dussan.org Git - redmine.git/commitdiff
Clean up toggleMultiSelect js function (#32813).
authorGo MAEDA <maeda@farend.jp>
Sun, 22 Mar 2020 05:25:39 +0000 (05:25 +0000)
committerGo MAEDA <maeda@farend.jp>
Sun, 22 Mar 2020 05:25:39 +0000 (05:25 +0000)
Patch by Mizuki ISHIKAWA.

git-svn-id: http://svn.redmine.org/redmine/trunk@19604 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/views/workflows/edit.html.erb
app/views/workflows/permissions.html.erb
public/javascripts/application.js

index 3f3e3c2f589fc060f00f6a3d1c7c2f5e1b6614fe..c247097a466fd494c3c2f47db89ad253a9746655 100644 (file)
 <p>
   <label><%=l(:label_role)%>:
   <%= options_for_workflow_select 'role_id[]', Role.sorted.select(&:consider_workflow?), @roles, :id => 'role_id', :class => 'expandable' %>
+  <span class="toggle-multiselect icon-only"></span>
   </label>
-  <a href="#" data-expands="#role_id"><span class="toggle-multiselect icon-only icon-toggle-plus"></span></a>
 
   <label><%=l(:label_tracker)%>:
   <%= options_for_workflow_select 'tracker_id[]', Tracker.sorted, @trackers, :id => 'tracker_id', :class => 'expandable' %>
+  <span class="toggle-multiselect icon-only"></span>
   </label>
-  <a href="#" data-expands="#tracker_id"><span class="toggle-multiselect icon-only icon-toggle-plus"></span></a>
 
   <%= submit_tag l(:button_edit), :name => nil %>
 
     </div>
     <%= submit_tag l(:button_save) %>
   <% end %>
-<% end %>
-
-<%= javascript_tag do %>
-$("a[data-expands]").click(function(e){
-  e.preventDefault();
-  var target = $($(this).attr("data-expands"));
-  if (target.attr("multiple")) {
-    $(this).find('span').switchClass('icon-toggle-minus', 'icon-toggle-plus');
-    target.attr("multiple", false);
-    target.find("option[value=all]").show();
-  } else {
-    $(this).find('span').switchClass('icon-toggle-plus', 'icon-toggle-minus');
-    target.attr("multiple", true);
-    target.find("option[value=all]").attr("selected", false).hide();
-  }
-});
-
-<% end %>
+<% end %>
\ No newline at end of file
index f2e9fff7b029926bc8c954f92305f699071eafc9..0b27c378d9f1bc099d7d6280ce0d2bb5503e46d7 100644 (file)
 <p>
   <label><%=l(:label_role)%>:
   <%= options_for_workflow_select 'role_id[]', Role.sorted.select(&:consider_workflow?), @roles, :id => 'role_id', :class => 'expandable' %>
+  <span class="toggle-multiselect icon-only"></span>
   </label>
-  <a href="#" data-expands="#role_id"><span class="toggle-multiselect icon-only icon-toggle-plus"></span></a>
 
   <label><%=l(:label_tracker)%>:
   <%= options_for_workflow_select 'tracker_id[]', Tracker.sorted, @trackers, :id => 'tracker_id', :class => 'expandable' %>
+  <span class="toggle-multiselect icon-only"></span>
   </label>
-  <a href="#" data-expands="#tracker_id"><span class="toggle-multiselect icon-only icon-toggle-plus"></span></a>
-
   <%= submit_tag l(:button_edit), :name => nil %>
 
   <%= hidden_field_tag 'used_statuses_only', '0', :id => nil %>
@@ -107,19 +106,4 @@ $("a.repeat-value").click(function(e){
   var selected = td.find("select").find(":selected").val();
   td.nextAll('td').find("select").val(selected);
 });
-
-$("a[data-expands]").click(function(e){
-  e.preventDefault();
-  var target = $($(this).attr("data-expands"));
-  if (target.attr("multiple")) {
-    $(this).find('span').switchClass('icon-toggle-minus', 'icon-toggle-plus');
-    target.attr("multiple", false);
-    target.find("option[value=all]").show();
-  } else {
-    $(this).find('span').switchClass('icon-toggle-plus', 'icon-toggle-minus');
-    target.attr("multiple", true);
-    target.find("option[value=all]").attr("selected", false).hide();
-  }
-});
-
 <% end %>
index c9b7bb6b59b694ef032386b9d0f5a966eebe5db1..f33c9caf85715c8405fe1035ee112def120464e1 100644 (file)
@@ -120,10 +120,6 @@ function initFilters() {
   $('#filters-table').on('click', 'td.field input[type=checkbox]', function() {
     toggleFilter($(this).val());
   });
-  $('#filters-table').on('click', '.toggle-multiselect', function() {
-    toggleMultiSelect($(this).siblings('select'))
-    $(this).toggleClass('icon-toggle-plus icon-toggle-minus')
-  });
   $('#filters-table').on('keypress', 'input[type=text]', function(e) {
     if (e.keyCode == 13) $(this).closest('form').submit();
   });
@@ -151,6 +147,7 @@ function addFilter(field, operator, values) {
   }
   $('#cb_'+fieldId).prop('checked', true);
   toggleFilter(field);
+  toggleMultiSelectIconInit();
   $('#add_filter_select').val('').find('option').each(function() {
     if ($(this).attr('value') == field) {
       $(this).attr('disabled', true);
@@ -189,7 +186,7 @@ function buildFilterRow(field, operator, values) {
   case "list_subprojects":
     tr.find('td.values').append(
       '<span style="display:none;"><select class="value" id="values_'+fieldId+'_1" name="v['+field+'][]"></select>' +
-      ' <span class="toggle-multiselect icon-only icon-toggle-plus">&nbsp;</span></span>'
+      ' <span class="toggle-multiselect icon-only '+(values.length > 1 ? 'icon-toggle-minus' : 'icon-toggle-plus')+'">&nbsp;</span></span>'
     );
     select = tr.find('td.values select');
     if (values.length > 1) { select.attr('multiple', true); }
@@ -336,11 +333,14 @@ function toggleOperator(field) {
 }
 
 function toggleMultiSelect(el) {
+  var isWorkflow = el.closest('.controller-workflows');
   if (el.attr('multiple')) {
     el.removeAttr('multiple');
+    if (isWorkflow) { el.find("option[value=all]").show(); }
     el.attr('size', 1);
   } else {
     el.attr('multiple', true);
+    if (isWorkflow) { el.find("option[value=all]").attr("selected", false).hide(); }
     if (el.children().length > 10)
       el.attr('size', 10);
     else
@@ -891,6 +891,15 @@ function toggleDisabledOnChange() {
 function toggleDisabledInit() {
   $('input[data-disables], input[data-enables], input[data-shows]').each(toggleDisabledOnChange);
 }
+function toggleMultiSelectIconInit() {
+  $('.toggle-multiselect:not(.icon-toggle-minus), .toggle-multiselect:not(.icon-toggle-plus)').each(function(){
+    if ($(this).siblings('select').find('option:selected').size() > 1){
+      $(this).addClass('icon-toggle-minus');
+    } else {
+      $(this).addClass('icon-toggle-plus');
+    }
+  });
+}
 
 function toggleNewObjectDropdown() {
   var dropdown = $('#new-object + ul.menu-children');
@@ -931,6 +940,12 @@ $(document).ready(function(){
   $('#content').on('change', 'input[data-disables], input[data-enables], input[data-shows]', toggleDisabledOnChange);
   toggleDisabledInit();
 
+  $('#content').on('click', '.toggle-multiselect', function() {
+    toggleMultiSelect($(this).siblings('select'));
+    $(this).toggleClass('icon-toggle-plus icon-toggle-minus');
+  });
+  toggleMultiSelectIconInit();
+
   $('#history .tabs').on('click', 'a', function(e){
     var tab = $(e.target).attr('id').replace('tab-','');
     document.cookie = 'history_last_tab=' + tab