Patch by Bernhard Rohloff. git-svn-id: http://svn.redmine.org/redmine/trunk@21275 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/5.0.0
<div id="query_form_with_buttons" class="hide-when-print"> | <div id="query_form_with_buttons" class="hide-when-print"> | ||||
<div id="query_form_content"> | <div id="query_form_content"> | ||||
<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> | <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> | ||||
<legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expended" : "collapsed" %>"><%= l(:label_filter_plural) %></legend> | |||||
<legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expanded" : "collapsed" %>"><%= l(:label_filter_plural) %></legend> | |||||
<div style="<%= @query.new_record? ? "" : "display: none;" %>"> | <div style="<%= @query.new_record? ? "" : "display: none;" %>"> | ||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %> | <%= render :partial => 'queries/filters', :locals => {:query => @query} %> | ||||
</div> | </div> |
<div id="query_form_with_buttons" class="hide-when-print"> | <div id="query_form_with_buttons" class="hide-when-print"> | ||||
<div id="query_form_content"> | <div id="query_form_content"> | ||||
<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> | <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> | ||||
<legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expended" : "collapsed" %>"><%= l(:label_filter_plural) %></legend> | |||||
<legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expanded" : "collapsed" %>"><%= l(:label_filter_plural) %></legend> | |||||
<div style="<%= @query.new_record? ? "" : "display: none;" %>"> | <div style="<%= @query.new_record? ? "" : "display: none;" %>"> | ||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %> | <%= render :partial => 'queries/filters', :locals => {:query => @query} %> | ||||
</div> | </div> |
<% reset_cycle %> | <% reset_cycle %> | ||||
<tr class="group open"> | <tr class="group open"> | ||||
<td colspan="<%= query.inline_columns.size + 2 %>"> | <td colspan="<%= query.inline_columns.size + 2 %>"> | ||||
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="expander icon icon-expanded" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="name"><%= group_name %></span> <span class="badge badge-count count"><%= group_count %></span> <span class="totals"><%= group_totals %></span> | <span class="name"><%= group_name %></span> <span class="badge badge-count count"><%= group_count %></span> <span class="totals"><%= group_totals %></span> | ||||
<%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", | <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", | ||||
"toggleAllRowGroups(this)", :class => 'toggle-all') %> | "toggleAllRowGroups(this)", :class => 'toggle-all') %> |
<% reset_cycle %> | <% reset_cycle %> | ||||
<tr class="group open"> | <tr class="group open"> | ||||
<td colspan="<%= @query.inline_columns.size %>"> | <td colspan="<%= @query.inline_columns.size %>"> | ||||
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="expander icon icon-expanded" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="name"><%= group_name %></span> | <span class="name"><%= group_name %></span> | ||||
<% if group_count %> | <% if group_count %> | ||||
<span class="count"><%= group_count %></span> | <span class="count"><%= group_count %></span> |
<div id="query_form_with_buttons" class="hide-when-print"> | <div id="query_form_with_buttons" class="hide-when-print"> | ||||
<div id="query_form_content"> | <div id="query_form_content"> | ||||
<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> | <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> | ||||
<legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expended" : "collapsed" %>"><%= l(:label_filter_plural) %></legend> | |||||
<legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expanded" : "collapsed" %>"><%= l(:label_filter_plural) %></legend> | |||||
<div style="<%= @query.new_record? ? "" : "display: none;" %>"> | <div style="<%= @query.new_record? ? "" : "display: none;" %>"> | ||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %> | <%= render :partial => 'queries/filters', :locals => {:query => @query} %> | ||||
</div> | </div> |
<% unless mod.blank? %> | <% unless mod.blank? %> | ||||
<tr class="group open"> | <tr class="group open"> | ||||
<td> | <td> | ||||
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="expander icon icon-expanded" onclick="toggleRowGroup(this);"> </span> | |||||
<%= l_or_humanize(mod, :prefix => 'project_module_') %> | <%= l_or_humanize(mod, :prefix => 'project_module_') %> | ||||
</td> | </td> | ||||
<% @roles.each do |role| %> | <% @roles.each do |role| %> |
<% reset_cycle %> | <% reset_cycle %> | ||||
<tr class="group open"> | <tr class="group open"> | ||||
<td colspan="<%= @query.inline_columns.size + 2 %>"> | <td colspan="<%= @query.inline_columns.size + 2 %>"> | ||||
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="expander icon icon-expanded" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="name"><%= group_name %></span> | <span class="name"><%= group_name %></span> | ||||
<% if group_count %> | <% if group_count %> | ||||
<span class="badge badge-count count"><%= group_count %></span> | <span class="badge badge-count count"><%= group_count %></span> |
<tbody> | <tbody> | ||||
<tr class="group open"> | <tr class="group open"> | ||||
<td colspan="<%= @trackers.size + 1 %>"> | <td colspan="<%= @trackers.size + 1 %>"> | ||||
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="expander icon icon-expanded" onclick="toggleRowGroup(this);"> </span> | |||||
<%= l(:field_core_fields) %> | <%= l(:field_core_fields) %> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
<% if @custom_fields.any? %> | <% if @custom_fields.any? %> | ||||
<tr class="group open"> | <tr class="group open"> | ||||
<td colspan="<%= @trackers.size + 1 %>"> | <td colspan="<%= @trackers.size + 1 %>"> | ||||
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="expander icon icon-expanded" onclick="toggleRowGroup(this);"> </span> | |||||
<%= l(:label_custom_field_plural) %> | <%= l(:label_custom_field_plural) %> | ||||
</td> | </td> | ||||
</tr> | </tr> |
<% if @completed_versions.present? %> | <% if @completed_versions.present? %> | ||||
<p> | <p> | ||||
<%= link_to_function l(:label_completed_versions), | <%= link_to_function l(:label_completed_versions), | ||||
'$("#toggle-completed-versions").toggleClass("icon-collapsed icon-expended"); $("#completed-versions").toggle()', | |||||
'$("#toggle-completed-versions").toggleClass("icon-collapsed icon-expanded"); $("#completed-versions").toggle()', | |||||
:id => 'toggle-completed-versions', :class => 'icon icon-collapsed collapsible' %> | :id => 'toggle-completed-versions', :class => 'icon icon-collapsed collapsible' %> | ||||
<ul id = "completed-versions" style = "display:none;"> | <ul id = "completed-versions" style = "display:none;"> | ||||
<% @completed_versions.each do |version| %> | <% @completed_versions.each do |version| %> | ||||
<% end %> | <% end %> | ||||
</ul> | </ul> | ||||
</p> | </p> | ||||
<% end %> | |||||
<% end %> |
<tbody> | <tbody> | ||||
<tr class="group open"> | <tr class="group open"> | ||||
<td colspan="<%= @statuses.size + 1 %>"> | <td colspan="<%= @statuses.size + 1 %>"> | ||||
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="expander icon icon-expanded" onclick="toggleRowGroup(this);"> </span> | |||||
<%= l(:field_core_fields) %> | <%= l(:field_core_fields) %> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
<% if @custom_fields.any? %> | <% if @custom_fields.any? %> | ||||
<tr class="group open"> | <tr class="group open"> | ||||
<td colspan="<%= @statuses.size + 1 %>"> | <td colspan="<%= @statuses.size + 1 %>"> | ||||
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> | |||||
<span class="expander icon icon-expanded" onclick="toggleRowGroup(this);"> </span> | |||||
<%= l(:label_custom_field_plural) %> | <%= l(:label_custom_field_plural) %> | ||||
</td> | </td> | ||||
</tr> | </tr> |
} | } | ||||
end | end | ||||
if has_children | if has_children | ||||
content = view.content_tag(:span, nil, :class => 'icon icon-expended expander') + content | |||||
content = view.content_tag(:span, nil, :class => 'icon icon-expanded expander') + content | |||||
tag_options[:class] += ' open' | tag_options[:class] += ' open' | ||||
else | else | ||||
if params[:indent] | if params[:indent] |
link_to_function( | link_to_function( | ||||
hide_label, js, | hide_label, js, | ||||
:id => "#{html_id}-hide", | :id => "#{html_id}-hide", | ||||
:class => 'icon icon-expended collapsible', | |||||
:class => 'icon icon-expanded collapsible', | |||||
:style => 'display:none;' | :style => 'display:none;' | ||||
) | ) | ||||
out << | out << |
var tr = $(el).parents('tr').first(); | var tr = $(el).parents('tr').first(); | ||||
var n = tr.next(); | var n = tr.next(); | ||||
tr.toggleClass('open'); | tr.toggleClass('open'); | ||||
$(el).toggleClass('icon-expended icon-collapsed'); | |||||
$(el).toggleClass('icon-expanded icon-collapsed'); | |||||
while (n.length && !n.hasClass('group')) { | while (n.length && !n.hasClass('group')) { | ||||
n.toggle(); | n.toggle(); | ||||
n = n.next('tr'); | n = n.next('tr'); | ||||
tbody.children('tr').each(function(index) { | tbody.children('tr').each(function(index) { | ||||
if ($(this).hasClass('group')) { | if ($(this).hasClass('group')) { | ||||
$(this).removeClass('open'); | $(this).removeClass('open'); | ||||
$(this).find('.expander').switchClass('icon-expended', 'icon-collapsed'); | |||||
$(this).find('.expander').switchClass('icon-expanded', 'icon-collapsed'); | |||||
} else { | } else { | ||||
$(this).hide(); | $(this).hide(); | ||||
} | } | ||||
tbody.children('tr').each(function(index) { | tbody.children('tr').each(function(index) { | ||||
if ($(this).hasClass('group')) { | if ($(this).hasClass('group')) { | ||||
$(this).addClass('open'); | $(this).addClass('open'); | ||||
$(this).find('.expander').switchClass('icon-collapsed', 'icon-expended'); | |||||
$(this).find('.expander').switchClass('icon-collapsed', 'icon-expanded'); | |||||
} else { | } else { | ||||
$(this).show(); | $(this).show(); | ||||
} | } | ||||
function toggleFieldset(el) { | function toggleFieldset(el) { | ||||
var fieldset = $(el).parents('fieldset').first(); | var fieldset = $(el).parents('fieldset').first(); | ||||
fieldset.toggleClass('collapsed'); | fieldset.toggleClass('collapsed'); | ||||
fieldset.children('legend').toggleClass('icon-expended icon-collapsed'); | |||||
fieldset.children('legend').toggleClass('icon-expanded icon-collapsed'); | |||||
fieldset.children('div').toggle(); | fieldset.children('div').toggle(); | ||||
} | } | ||||
var el = $('#'+id); | var el = $('#'+id); | ||||
if (el.hasClass('open')) { | if (el.hasClass('open')) { | ||||
collapseScmEntry(id); | collapseScmEntry(id); | ||||
el.find('.expander').switchClass('icon-expended', 'icon-collapsed'); | |||||
el.find('.expander').switchClass('icon-expanded', 'icon-collapsed'); | |||||
el.addClass('collapsed'); | el.addClass('collapsed'); | ||||
return false; | return false; | ||||
} else if (el.hasClass('loaded')) { | } else if (el.hasClass('loaded')) { | ||||
expandScmEntry(id); | expandScmEntry(id); | ||||
el.find('.expander').switchClass('icon-collapsed', 'icon-expended'); | |||||
el.find('.expander').switchClass('icon-collapsed', 'icon-expanded'); | |||||
el.removeClass('collapsed'); | el.removeClass('collapsed'); | ||||
return false; | return false; | ||||
} | } | ||||
success: function(data) { | success: function(data) { | ||||
el.after(data); | el.after(data); | ||||
el.addClass('open').addClass('loaded').removeClass('loading'); | el.addClass('open').addClass('loaded').removeClass('loading'); | ||||
el.find('.expander').switchClass('icon-collapsed', 'icon-expended'); | |||||
el.find('.expander').switchClass('icon-collapsed', 'icon-expanded'); | |||||
} | } | ||||
}); | }); | ||||
return true; | return true; |
var iconChange = null; | var iconChange = null; | ||||
if(subject.hasClass('open')) | if(subject.hasClass('open')) | ||||
iconChange = function(element){ | iconChange = function(element){ | ||||
$(element).find('.expander').switchClass('icon-expended', 'icon-collapsed'); | |||||
$(element).find('.expander').switchClass('icon-expanded', 'icon-collapsed'); | |||||
$(element).removeClass('open'); | $(element).removeClass('open'); | ||||
}; | }; | ||||
else | else | ||||
iconChange = function(element){ | iconChange = function(element){ | ||||
$(element).find('.expander').switchClass('icon-collapsed', 'icon-expended'); | |||||
$(element).find('.expander').switchClass('icon-collapsed', 'icon-expanded'); | |||||
$(element).addClass('open'); | $(element).addClass('open'); | ||||
}; | }; | ||||
iconChange(subject); | iconChange(subject); |
.icon-shared { background-image: url(../images/link.png); } | .icon-shared { background-image: url(../images/link.png); } | ||||
.icon-actions { background-image: url(../images/3_bullets.png); } | .icon-actions { background-image: url(../images/3_bullets.png); } | ||||
.icon-sort-handle { background-image: url(../images/reorder.png); } | .icon-sort-handle { background-image: url(../images/reorder.png); } | ||||
.icon-expended { background-image: url(../images/arrow_down.png); } | |||||
.icon-expanded { background-image: url(../images/arrow_down.png); } | |||||
.icon-collapsed { background-image: url(../images/arrow_right.png); } | .icon-collapsed { background-image: url(../images/arrow_right.png); } | ||||
.icon-bookmark { background-image: url(../images/tag_blue_delete.png); } | .icon-bookmark { background-image: url(../images/tag_blue_delete.png); } | ||||
.icon-bookmark-off { background-image: url(../images/tag_blue_add.png); } | .icon-bookmark-off { background-image: url(../images/tag_blue_add.png); } |
assert_select_in result, 'div.collapsed-text' | assert_select_in result, 'div.collapsed-text' | ||||
assert_select_in result, 'strong', :text => 'Collapsed' | assert_select_in result, 'strong', :text => 'Collapsed' | ||||
assert_select_in result, 'a.collapsible.icon-collapsed', :text => 'Show' | assert_select_in result, 'a.collapsible.icon-collapsed', :text => 'Show' | ||||
assert_select_in result, 'a.collapsible.icon-expended', :text => 'Hide' | |||||
assert_select_in result, 'a.collapsible.icon-expanded', :text => 'Hide' | |||||
end | end | ||||
end | end | ||||
assert_select_in result, 'div.collapsed-text' | assert_select_in result, 'div.collapsed-text' | ||||
assert_select_in result, 'strong', :text => 'Collapsed' | assert_select_in result, 'strong', :text => 'Collapsed' | ||||
assert_select_in result, 'a.collapsible.icon-collapsed', :text => 'Example' | assert_select_in result, 'a.collapsible.icon-collapsed', :text => 'Example' | ||||
assert_select_in result, 'a.collapsible.icon-expended', :text => 'Example' | |||||
assert_select_in result, 'a.collapsible.icon-expanded', :text => 'Example' | |||||
end | end | ||||
def test_macro_collapse_with_two_args | def test_macro_collapse_with_two_args | ||||
assert_select_in result, 'div.collapsed-text' | assert_select_in result, 'div.collapsed-text' | ||||
assert_select_in result, 'strong', :text => 'Collapsed' | assert_select_in result, 'strong', :text => 'Collapsed' | ||||
assert_select_in result, 'a.collapsible.icon-collapsed', :text => 'Show example' | assert_select_in result, 'a.collapsible.icon-collapsed', :text => 'Show example' | ||||
assert_select_in result, 'a.collapsible.icon-expended', :text => 'Hide example' | |||||
assert_select_in result, 'a.collapsible.icon-expanded', :text => 'Hide example' | |||||
end | end | ||||
def test_macro_collapse_should_not_break_toc | def test_macro_collapse_should_not_break_toc |