source: trunk/www/common/columns/configure.jsp @ 5907

Last change on this file since 5907 was 5907, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

New design on some more pages:

  • Impersonate
  • Switch user
  • Calendar
  • Close popup message
  • Configure columns
  • Manage lists contexts
  • View help
  • Set owner
  • Share items
  • About
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 10.0 KB
Line 
1<%-- $Id: configure.jsp 5907 2011-12-13 08:36:28Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Gregory Vincic
5  Copyright (C) 2007 Nicklas Nordborg
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 3
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with BASE. If not, see <http://www.gnu.org/licenses/>.
22  ------------------------------------------------------------------
23
24  Configure the order and visibility of columns in a table of items.
25  This page will use the TableColumn.getTableColumns(item) to retreive the
26  list of all available columns for that item type and
27  getSession().getSetting(item+".columns") to retreive a comma-separated
28  list of the current order of visible columns.
29
30  @param item The type of items in the table
31
32  @author Nicklas
33  @version 2.0
34--%>
35<%@ page pageEncoding="UTF-8" session="false"
36  import="net.sf.basedb.core.SessionControl"
37  import="net.sf.basedb.core.Item"
38  import="net.sf.basedb.core.ItemContext"
39  import="net.sf.basedb.util.Enumeration"
40  import="net.sf.basedb.clients.web.util.HTML"
41  import="net.sf.basedb.util.Values"
42  import="net.sf.basedb.clients.web.Base"
43  import="java.util.Set"
44  import="java.util.TreeSet"
45%>
46<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
47<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
48
49<%
50final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
51final String ID = sc.getId();
52final Item itemType = Item.valueOf(request.getParameter("item_type"));
53final String subContext = Values.getString(request.getParameter("subcontext"), "");
54final String tableId = request.getParameter("table_id");
55final String defaultColumns = request.getParameter("default");
56final String settingName = Values.getString(request.getParameter("settingName"), "columns");
57%>
58  <base:page type="popup" title="Set column order and visibility">
59  <base:head>
60    <script language="JavaScript">
61    var tableId = '<%=tableId%>';
62
63    // Initialise the visible and hidden column lists
64    function initColumns(columns)
65    {
66      var frm = document.forms['columns'];
67      var visible = frm.visible;
68      var hidden = frm.hidden;
69      visible.length = 0;
70      hidden.length = 0; 
71
72      // The visibled columns (comma-separated)
73      var allVisible = columns == 'all';
74      var visibleCols = columns.split(',');
75
76      // All column definitions
77      var columnDefs = window.opener.Table.getColumnDefs(tableId);
78
79      // Put all column in the hidden or visible list
80      var toList = allVisible ? visible : hidden;
81      for (var i = 0; i < columnDefs.length; i++) 
82      {
83        var col = columnDefs[i];
84        if (!col.alwaysHide) addCol(toList, col);
85      }
86     
87      // Move visible columns to the visible list
88      if (!allVisible)
89      {
90        for (var i = 0; i < visibleCols.length; i++)
91        {
92          var colId = visibleCols[i];
93          var col = columnDefs['id'+colId];
94          for (var j = 0; j < hidden.length; j++)
95          {
96            if (hidden[j].value == colId)
97            {
98              addCol(visible, col);
99              hidden[j] = null;
100              j = hidden.length;
101            }
102          }
103        }
104       
105        // Move columns that must be visible to the visible list
106        for (var i = 0; i < hidden.length; i++)
107        {
108          var col = columnDefs['id'+hidden.options[i].value];
109          if (col && col.alwaysShow)
110          {
111            addCol(visible, col);
112            hidden[i] = null; 
113            i--;
114          }
115        }
116      }
117    }
118   
119    function addCol(toList, col)
120    {
121      var option = new Option(col.title, col.id);
122      if (col.alwaysShow)
123      {
124        option.style.fontWeight = 'bold';
125        option.text = option.text+' ×';
126      }
127      toList[toList.length] = option;
128    }
129
130    // Moves all selected items in list1 to list2
131    function moveBetween(list1, list2)
132    {
133      var moved = 0;
134      var columnDefs = window.opener.Table.getColumnDefs(tableId);
135      for(i=0; i < list1.options.length; i++) // >
136      {
137        if (list1.options[i].selected)
138        {
139          var col = columnDefs['id'+list1.options[i].value];
140          if (col.alwaysShow)
141          {
142            alert("'" + col.title + "' must always be visible");
143          }
144          else
145          {
146            moved++;
147            list2.options[list2.options.length] = new Option(list1.options[i].text, list1.options[i].value, false, true);
148            list1.options[i] = null;
149            i--;
150          }
151        }
152      }
153      if (moved > 0) clearPreset();
154    }
155   
156    // Move all selected items in the list up or down
157    function moveSelected(list, up)
158    {
159      var moved = Forms.moveListOptions(list, up);
160      if (moved > 0) clearPreset();
161    }
162   
163    // Sets the preset selection list to the first (empty) element
164    function clearPreset()
165    {
166      var frm = document.forms['columns'];
167      frm.presets.selectedIndex = 0;
168    }
169   
170    // Update the settings according to the selection in the presets list
171    function updateColumns()
172    {
173      var frm = document.forms['columns'];
174      var presets = frm.presets;
175      var columns = presets.options[presets.selectedIndex].value;
176      if (columns == '') return;
177      if (columns == '_default_') columns = '<%=defaultColumns%>';
178      if (columns == '_current_') columns = window.opener.Table.getColumns('<%=tableId%>');
179      if (columns == '_minimal_')
180      {
181        var columnDefs = window.opener.Table.getColumnDefs(tableId);
182        var temp = new Array();
183        for (var i = 0; i < columnDefs.length; i++) // >
184        {
185          var col = columnDefs[i];
186          var option = new Option(col.title, col.id);
187          if (col.alwaysShow) temp[temp.length] = col.id;
188        }
189        columns = temp.join(',');
190      }
191      initColumns(columns);
192    }
193   
194    function savePresetAs()
195    {
196      var selected = getVisibleColumns();
197      Main.openPopup('save_preset.jsp?ID=<%=ID%>&item_type=<%=itemType.name()%>&subcontext=<%=subContext%>&settingName=<%=settingName%>&columns='+selected, 'SavePreset', 440, 280);
198    }
199   
200    // Save the configuration to the parent window
201    function saveColumns()
202    {
203      var selected = getVisibleColumns()
204      window.opener.Table.setColumns('<%=tableId%>', selected);
205      window.close();
206    }
207   
208    // Get all visible columns as a comma-separated string
209    function getVisibleColumns()
210    {
211      var list = document.forms['columns'].visible;
212      var selected = '';
213      for (var i = 0; i < list.options.length; i++)
214      {
215        if (i > 0) selected += ',';
216        selected += list.options[i].value;
217      }
218      return selected;
219    }
220    </script>
221  </base:head>
222  <base:body onload="<%="initColumns(window.opener.Table.getColumns('"+tableId+"'))"%>">
223    <h1>Set column order and visiblity <base:help helpid="columns.configure" /></h1>
224    <form name="columns" onsubmit="return false;">
225 
226    <div class="content filled">
227    <table style="width: 100%; height: 100%;">
228    <tr>
229      <td style="padding: 5px;">
230        <base:buttongroup vertical="true">
231          <base:button
232            onclick="moveSelected(document.forms['columns'].visible, false)" 
233            image="move_up.png" 
234            tooltip="Move up" 
235            subclass="square"
236          />
237          <base:button 
238            onclick="moveSelected(document.forms['columns'].visible, true)" 
239            image="move_down.png" 
240            tooltip="Move down" 
241            subclass="square"
242          />
243        </base:buttongroup>
244      </td>
245 
246      <td style="width: 45%;">
247        <b>Visible columns</b><br>
248        <select name="visible" multiple size="16" style="width: 100%;" 
249          ondblclick="moveBetween(document.forms['columns'].visible, document.forms['columns'].hidden)">
250        </select>
251      </td>
252      <td style="padding: 5px;">
253        <base:buttongroup vertical="true">
254          <base:button
255            onclick="moveBetween(document.forms['columns'].hidden, document.forms['columns'].visible)" 
256            image="move_left.png" 
257            tooltip="Make the selected hidden column(s) visible" 
258            subclass="square"
259          />
260          <base:button 
261            onclick="moveBetween(document.forms['columns'].visible, document.forms['columns'].hidden)" 
262            image="move_right.png" 
263            tooltip="Make the selected visible column(s) hidden" 
264            subclass="square"
265          />
266        </base:buttongroup>
267      </td>
268 
269      <td style="width: 45%; padding-right: 5px;">
270        <b>Hidden columns</b><br>
271        <select name="hidden" multiple size="16" style="width: 100%;" 
272          ondblclick="moveBetween(document.forms['columns'].hidden, document.forms['columns'].visible)">
273        </select>
274      </td>
275    </tr>   
276    <tr>
277      <td colspan="4" >
278        <table style="margin-left: auto; margin-right: auto;">
279        <tr>
280        <td>
281          <b>Presets</b>
282          <select name="presets" onChange="updateColumns()">
283            <option value="">-- predefined --
284            <option value="all">All
285            <option value="_minimal_">Required
286            <option value="_current_">Current
287            <%
288            if (defaultColumns != null)
289            {
290              %>
291              <option value="_default_">Default
292              <%
293            }
294            %>
295            <option value="">-- user defined --
296            <%
297            Enumeration<Integer, String> contexts = sc.getContextNames(itemType, subContext);
298            for (int i = 0; i < contexts.size(); ++i)
299            {
300              ItemContext context = sc.getContext(contexts.getKey(i));
301              if (context != null && !ItemContext.DEFAULT_NAME.equals(context.getName()))
302              {
303                String columns = context.getSetting(settingName);
304                if (columns != null)
305                {
306                  %>
307                  <option value="<%=columns%>"><%=HTML.encodeTags(context.getName())%>
308                  <%
309                }
310              }
311            }
312            %>
313          </select>
314          </td>
315          <%
316          if (request.getParameter("nosavedelete") == null)
317          {
318            %>
319            <td><base:button onclick="savePresetAs();" title="Save as&hellip;" /></td>
320            <%
321          }
322          %>
323        </tr>
324        </table>
325
326        <div class="padded" style="text-align: right;">
327          <b>×</b> = This column cannot be hidden
328        </div>
329
330      </td>
331    </tr>
332    </table>
333    </div>
334    </form>
335    <base:buttongroup subclass="dialogbuttons">
336      <base:button onclick="saveColumns();" title="Ok" />
337      <base:button onclick="window.close();" title="Cancel" />
338    </base:buttongroup>
339  </base:body>
340  </base:page>
Note: See TracBrowser for help on using the repository browser.