##// END OF EJS Templates
Custom query columns: checkboxes replaced by two selects that let the user specify columns order....
Jean-Philippe Lang -
r773:514cdacc87e6
parent child
Show More
@@ -0,0 +1,55
1 var NS4 = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) < 5);
2
3 function addOption(theSel, theText, theValue)
4 {
5 var newOpt = new Option(theText, theValue);
6 var selLength = theSel.length;
7 theSel.options[selLength] = newOpt;
8 }
9
10 function deleteOption(theSel, theIndex)
11 {
12 var selLength = theSel.length;
13 if(selLength>0)
14 {
15 theSel.options[theIndex] = null;
16 }
17 }
18
19 function moveOptions(theSelFrom, theSelTo)
20 {
21
22 var selLength = theSelFrom.length;
23 var selectedText = new Array();
24 var selectedValues = new Array();
25 var selectedCount = 0;
26
27 var i;
28
29 for(i=selLength-1; i>=0; i--)
30 {
31 if(theSelFrom.options[i].selected)
32 {
33 selectedText[selectedCount] = theSelFrom.options[i].text;
34 selectedValues[selectedCount] = theSelFrom.options[i].value;
35 deleteOption(theSelFrom, i);
36 selectedCount++;
37 }
38 }
39
40 for(i=selectedCount-1; i>=0; i--)
41 {
42 addOption(theSelTo, selectedText[i], selectedValues[i]);
43 }
44
45 if(NS4) history.go(0);
46 }
47
48 function selectAllOptions(id)
49 {
50 var select = $(id);
51 for (var i=0; i<select.options.length; i++) {
52 select.options[i].selected = true;
53 }
54 }
55
@@ -46,7 +46,7 class IssuesController < ApplicationController
46 @issue_count = Issue.count(:include => [:status, :project], :conditions => @query.statement)
46 @issue_count = Issue.count(:include => [:status, :project], :conditions => @query.statement)
47 @issue_pages = Paginator.new self, @issue_count, 25, params['page']
47 @issue_pages = Paginator.new self, @issue_count, 25, params['page']
48 @issues = Issue.find :all, :order => sort_clause,
48 @issues = Issue.find :all, :order => sort_clause,
49 :include => [ :assigned_to, :status, :tracker, :project, :priority ],
49 :include => [ :assigned_to, :status, :tracker, :project, :priority, :category ],
50 :conditions => @query.statement,
50 :conditions => @query.statement,
51 :limit => @issue_pages.items_per_page,
51 :limit => @issue_pages.items_per_page,
52 :offset => @issue_pages.current.offset
52 :offset => @issue_pages.current.offset
@@ -250,7 +250,7 class ProjectsController < ApplicationController
250 @issue_count = Issue.count(:include => [:status, :project], :conditions => @query.statement)
250 @issue_count = Issue.count(:include => [:status, :project], :conditions => @query.statement)
251 @issue_pages = Paginator.new self, @issue_count, @results_per_page, params['page']
251 @issue_pages = Paginator.new self, @issue_count, @results_per_page, params['page']
252 @issues = Issue.find :all, :order => sort_clause,
252 @issues = Issue.find :all, :order => sort_clause,
253 :include => [ :assigned_to, :status, :tracker, :project, :priority ],
253 :include => [ :assigned_to, :status, :tracker, :project, :priority, :category ],
254 :conditions => @query.statement,
254 :conditions => @query.statement,
255 :limit => @issue_pages.items_per_page,
255 :limit => @issue_pages.items_per_page,
256 :offset => @issue_pages.current.offset
256 :offset => @issue_pages.current.offset
@@ -211,7 +211,8 class Query < ActiveRecord::Base
211 if has_default_columns?
211 if has_default_columns?
212 available_columns.select {|c| c.default? }
212 available_columns.select {|c| c.default? }
213 else
213 else
214 available_columns.select {|c| column_names.include?(c.name) }
214 # preserve the column_names order
215 column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact
215 end
216 end
216 end
217 end
217
218
@@ -1,7 +1,27
1 <% content_tag 'fieldset', :id => 'columns', :style => (query.has_default_columns? ? 'display:none;' : nil) do %>
1 <% content_tag 'fieldset', :id => 'columns', :style => (query.has_default_columns? ? 'display:none;' : nil) do %>
2 <legend><%= l(:field_column_names) %></legend>
2 <legend><%= l(:field_column_names) %></legend>
3 <% query.available_columns.each do |column| %>
3
4 <label><%= check_box_tag 'query[column_names][]', column.name, query.has_column?(column) %> <%= l("field_#{column.name}") %></label><br />
5 <% end %>
6 <%= hidden_field_tag 'query[column_names][]', '' %>
4 <%= hidden_field_tag 'query[column_names][]', '' %>
5 <table margin=0>
6 <tr>
7 <td><%= select_tag 'available_columns',
8 options_for_select((query.available_columns - query.columns).collect {|column| [l("field_#{column.name}"), column.name]}),
9 :multiple => true, :size => 10, :style => "width:150px" %>
10 </td>
11 <td align="center" valign="middle">
12 <input type="button" value="--&gt;"
13 onclick="moveOptions(this.form.available_columns, this.form.selected_columns);" /><br />
14 <input type="button" value="&lt;--"
15 onclick="moveOptions(this.form.selected_columns, this.form.available_columns);" />
16 </td>
17 <td><%= select_tag 'query[column_names][]',
18 options_for_select(@query.columns.collect {|column| [l("field_#{column.name}"), column.name]}),
19 :id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %>
20 </td>
21 </tr>
22 </table>
23 <% end %>
24
25 <% content_for :header_tags do %>
26 <%= javascript_include_tag 'select_list_move' %>
7 <% end %>
27 <% end %>
@@ -12,9 +12,9
12
12
13 <p><label for="query_default_columns"><%=l(:label_default_columns)%></label>
13 <p><label for="query_default_columns"><%=l(:label_default_columns)%></label>
14 <%= check_box_tag 'default_columns', 1, @query.has_default_columns?, :id => 'query_default_columns',
14 <%= check_box_tag 'default_columns', 1, @query.has_default_columns?, :id => 'query_default_columns',
15 :onchange => 'if (this.checked) {Element.hide("columns")} else {Element.show("columns")}' %></p>
15 :onclick => 'if (this.checked) {Element.hide("columns")} else {Element.show("columns")}' %></p>
16 </div>
16 </div>
17
17
18 <%= render :partial => 'queries/columns', :locals => {:query => query}%>
19 <%= render :partial => 'queries/filters', :locals => {:query => query}%>
18 <%= render :partial => 'queries/filters', :locals => {:query => query}%>
19 <%= render :partial => 'queries/columns', :locals => {:query => query}%>
20 </div>
20 </div>
@@ -1,6 +1,6
1 <h2><%= l(:label_query) %></h2>
1 <h2><%= l(:label_query) %></h2>
2
2
3 <% form_tag({:action => 'edit', :id => @query}) do %>
3 <% form_tag({:action => 'edit', :id => @query}, :onsubmit => 'selectAllOptions("selected_columns");') do %>
4 <%= render :partial => 'form', :locals => {:query => @query} %>
4 <%= render :partial => 'form', :locals => {:query => @query} %>
5 <%= submit_tag l(:button_save) %>
5 <%= submit_tag l(:button_save) %>
6 <% end %>
6 <% end %>
@@ -1,6 +1,6
1 <h2><%= l(:label_query_new) %></h2>
1 <h2><%= l(:label_query_new) %></h2>
2
2
3 <% form_tag({:action => 'new', :project_id => @query.project}) do %>
3 <% form_tag({:action => 'new', :project_id => @query.project}, :onsubmit => 'selectAllOptions("selected_columns");') do %>
4 <%= render :partial => 'form', :locals => {:query => @query} %>
4 <%= render :partial => 'form', :locals => {:query => @query} %>
5 <%= submit_tag l(:button_save) %>
5 <%= submit_tag l(:button_save) %>
6 <% end %>
6 <% end %>
General Comments 0
You need to be logged in to leave comments. Login now