Changeset 7957


Ignore:
Timestamp:
Jun 3, 2021, 9:39:33 AM (6 months ago)
Author:
Nicklas Nordborg
Message:

References #2253: Configure sticky column

It should now be possible to select a sticky column in the "Configure columns" dialog. The setting is stored in the current ItemContext under the key columns.sticky.

So far, only the raw bioassays list page has been update to use the new setting.

Location:
branches/3.18-stable
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/3.18-stable/src/clients/web/net/sf/basedb/clients/web/Base.java

    r7895 r7957  
    532532    {
    533533      cc.setObject("defaultColumns", defaultContext.getObject("defaultColumns"));
     534      cc.setObject("defaultColumns.sticky", defaultContext.getObject("defaultColumns.sticky"));
    534535    }
    535536    if (request != null)
     
    567568      // Visible columns
    568569      cc.setSetting("columns", Values.getString(Values.getStringOrNull(request.getParameter("columns")), cc.getSetting("columns")));
     570      // Sticky column
     571      String stickyCol = Values.getStringOrNull(request.getParameter("sticky_column"));
     572      if (stickyCol != null) cc.setSetting("columns.sticky", stickyCol);
    569573
    570574      // Page settings, ignore negative values, 'rowsperpage' setting may come as an
     
    991995 
    992996  /**
     997    Create a default context where the sortProperty is also used as
     998    the default sticky column.
     999    @see #createDefaultContext(String, String, String)
     1000  */
     1001  public static ItemContext createDefaultContext(String sortProperty, String defaultColumns)
     1002  {
     1003    return createDefaultContext(sortProperty, defaultColumns, sortProperty);
     1004  }
     1005
     1006  /**
    9931007    Create a default <code>ItemContext</code> with settings for default
    9941008    visible columns and sort property. 'MINE' and 'SHARED' objects are set to be included.
     
    9961010      a '-', the sort is made in descending order (and the minus is removed)
    9971011    @param defaultColumns The visible columns as a comma separated String.
     1012    @param stickyColumn The default sticky column or null to not use a sticky column
    9981013    @return an {@link net.sf.basedb.core.ItemContext} object
    999   */
    1000   public static ItemContext createDefaultContext(String sortProperty, String defaultColumns)
     1014    @since 3.18.2
     1015  */
     1016  public static ItemContext createDefaultContext(String sortProperty, String defaultColumns, String stickyColumn)
    10011017  {
    10021018    SortDirection sortDirection = SortDirection.ASC;
     
    10091025    cc.setSetting("columns", defaultColumns);
    10101026    cc.setObject("defaultColumns", defaultColumns);
     1027    if (stickyColumn != null)
     1028    {
     1029      cc.setSetting("columns.sticky", stickyColumn);
     1030      cc.setObject("defaultColumns.sticky", stickyColumn);
     1031    }
    10111032    cc.getInclude().add(Include.MINE);
    10121033    cc.getInclude().add(Include.SHARED);
  • branches/3.18-stable/src/clients/web/net/sf/basedb/clients/web/taglib/table/Table.java

    r7935 r7957  
    742742    addHidden("sortby", getSortby());
    743743    addHidden("direction", getDirection().name());
     744    if (hasStickyHeaders()) addHidden("sticky_column", getStickyCol());
    744745   
    745746    if (sc != null && itemType != null)
  • branches/3.18-stable/src/core/net/sf/basedb/core/ItemContext.java

    r7911 r7957  
    14251425  {
    14261426    return settings == null ? null : settings.get(name);
     1427  }
     1428 
     1429  /**
     1430    Get a value from the settings or the default value
     1431    if no current value exists.
     1432    @since 3.18.2
     1433  */
     1434  public String getSetting(String name, String defaultValue)
     1435  {
     1436    String s = getSetting(name);
     1437    return s == null ? defaultValue : s;
    14271438  }
    14281439 
  • branches/3.18-stable/www/common/columns/configure.js

    r7853 r7957  
    2828  var columnDefs;
    2929  var currentColumns;
     30  var currentStickyColumn;
    3031 
    3132  var configure = {};
     
    4142    columnDefs = window.opener.Table.getColumnDefs(tableId);
    4243    currentColumns = window.opener.Table.getColumns(tableId);
     44    currentStickyColumn = window.opener.Table.getStickyColumn(tableId);
    4345   
    4446    // Initialize the visible and hidden columns lists
    45     configure.initColumns(currentColumns);
     47    configure.initColumns(currentColumns, currentStickyColumn);
    4648   
    4749    // Buttons
     
    7880    @param columns A comma-separated string with visible columns
    7981  */
    80   configure.initColumns = function(columns)
    81   {
    82     var frm = document.forms['columns'];
    83     // Remove all entries from the 'visible' and 'hidden' lists
     82  configure.initColumns = function(columns, stickyColumn)
     83  {
     84    var frm = document.forms['columns'];
     85    // Remove all entries from the 'visible', 'hidden' and 'sticky' lists
    8486    var visible = frm.visible;
    8587    var hidden = frm.hidden;
     88    var sticky = frm.sticky;
    8689    visible.length = 0;
    8790    hidden.length = 0;
     91    if (sticky)
     92    {
     93      sticky.length = 0;
     94      sticky[0] = new Option('- none -', '_');
     95    }
    8896   
    8997    // The visibled columns (comma-separated)
     
    96104    {
    97105      var col = columnDefs[i];
    98       if (!col.alwaysHide) configure.addColumn(toList, col);
     106      if (!col.alwaysHide)
     107      {
     108        configure.addColumn(toList, col);
     109        if (sticky)
     110        {
     111          configure.addColumn(sticky, col);
     112          if (col.id == stickyColumn) sticky.selectedIndex = sticky.length-1;
     113        }
     114      }
    99115    }
    100116   
     
    139155    var option = new Option(column.title, column.id);
    140156    option.title = column.title;
    141     if (column.alwaysShow)
     157    if (column.alwaysShow && list.multiple)
    142158    {
    143159      option.style.fontWeight = 'bold';
     
    156172    var presets = frm.presets;
    157173    var columns = presets.value;
     174    var stickyColumn = Data.get(presets[presets.selectedIndex], 'sticky-column');
    158175    if (columns == '') return;
    159     if (columns == '_default_') columns = Data.get('page-data', 'default-columns');
    160     if (columns == '_current_') columns = currentColumns;
     176    if (columns == '_default_')
     177    {
     178      columns = Data.get('page-data', 'default-columns');
     179      stickyColumn = Data.get('page-data', 'default-sticky');
     180    }
     181    if (columns == '_current_')
     182    {
     183      columns = currentColumns;
     184      stickyColumn = currentStickyColumn;
     185    }
    161186    if (columns == '_minimal_')
    162187    {
     
    169194      columns = temp.join(',');
    170195    }
    171     configure.initColumns(columns);
     196    if (stickyColumn == null && frm.sticky) stickyColumn = frm.sticky.value;
     197    configure.initColumns(columns, stickyColumn);
    172198    presets.selectedIndex = 0;
    173199  }
     
    179205  {
    180206    var visible = configure.getVisibleColumns();
     207    var frm = document.forms['columns'];
     208
    181209    var url = 'save_preset.jsp?ID='+App.getSessionId();
    182210    url += '&item_type='+Data.get('page-data', 'item-type');
    183211    url += '&subcontext='+Data.get('page-data', 'subcontext', '');
    184212    url += '&settingName='+Data.get('page-data', 'setting-name');
    185     url += '&columns='+visible;
     213    url += '&columns='+encodeURIComponent(visible);
     214    if (frm.sticky) url += '&stickyColumn='+encodeURIComponent(frm.sticky.value)
    186215    Dialogs.openPopup(url, 'SavePreset', 450, 300);
    187216  }
     
    209238    var item = event.detail;
    210239    var colId = 'ia'+item.id;
    211     // Do not add duplicates
    212     for (var i = 0; i < frm.visible.length; i++)
    213     {
    214       if (frm.visible[i].value == colId) return;
    215     }
    216240    // Remove from 'hidden' list
    217241    for (var i = frm.hidden.length-1; i >= 0; i--)
     
    219243      if (frm.hidden[i].value == colId) frm.hidden[i] = null;
    220244    }
    221     frm.visible[frm.visible.length] = new Option(item.name + ' [I]', colId);
     245    configure.addUniqueOption(frm.visible, new Option(item.name + ' [I]', colId));
     246    if (frm.sticky)
     247    {
     248      configure.addUniqueOption(frm.sticky, new Option(item.name + ' [I]', colId));
     249    }
     250
    222251  }
    223252 
     
    235264    var frm = document.forms['columns'];
    236265    var data = event.detail;
    237     // Do not add duplicates
    238     for (var i = 0; i < frm.visible.length; i++)
    239     {
    240       if (frm.visible[i].value == data.property) return;
    241     }
    242     frm.visible[frm.visible.length] = new Option(data.title, data.property);
     266    configure.addUniqueOption(frm.visible, new Option(data.title, data.property));
     267    if (frm.sticky)
     268    {
     269      configure.addUniqueOption(frm.sticky, new Option(data.title, data.property));
     270    }
    243271  }
    244272 
     
    256284    var frm = document.forms['columns'];
    257285    var data = event.detail;
    258     // Do not add duplicates
    259     for (var i = 0; i < frm.visible.length; i++)
    260     {
    261       if (frm.visible[i].value == data.property) return;
    262     }
    263     frm.visible[frm.visible.length] = new Option(data.title, data.property);
     286    configure.addUniqueOption(frm.visible, new Option(data.title, data.property));
     287    if (frm.sticky)
     288    {
     289      configure.addUniqueOption(frm.sticky, new Option(data.title, data.property));
     290    }
     291  }
     292 
     293  /**
     294    Add the option to the list if there is no other options with the
     295    same value.
     296  */
     297  configure.addUniqueOption = function(list, option)
     298  {
     299    for (var i = 0; i < list.length; i++)
     300    {
     301      if (list[i].value == option.value) return;
     302    }
     303    list[list.length] = option;
    264304  }
    265305 
     
    269309  configure.save = function()
    270310  {
     311    var frm = document.forms['columns'];
    271312    var tableId = Data.get('page-data', 'table-id');
    272313    var visible = configure.getVisibleColumns();
    273     window.opener.Table.setColumns(tableId, visible);
     314    window.opener.Table.setColumns(tableId, visible, frm.sticky ? frm.sticky.value : null);
    274315    window.close();
    275316  }
  • branches/3.18-stable/www/common/columns/configure.jsp

    r7851 r7957  
    5656final boolean enableRelatedItemColumns = Values.getBoolean(request.getParameter("enableRelatedItemColumns"));
    5757final boolean enableLinkedItemColumns = Values.getBoolean(request.getParameter("enableLinkedItemColumns"));
     58final boolean enableStickyColumn = Values.getBoolean(request.getParameter("enableStickyColumn"));
    5859final ItemContext cc = sc.getCurrentContext(itemType, subContext);
    5960
    6061final String defaultColumns = cc.getObject("defaultColumns");
     62final String defaultSticky = cc.getObject("defaultColumns.sticky");
    6163final String settingName = Values.getString(request.getParameter("settingName"), "columns");
    6264%>
     
    6971      data-table-id="<%=tableId%>"
    7072      data-default-columns="<%=HTML.encodeTags(defaultColumns) %>"
     73      data-default-sticky="<%=HTML.encodeTags(defaultSticky) %>"
    7174      data-item-type="<%=itemType.name() %>"
    7275      data-subcontext="<%=subContext %>"
     
    160163    </tr>
    161164    <tr>
    162       <td colspan="4" >
     165      <td></td>
     166      <%
     167      // The layout will be different depending on if the "Sticky column" option
     168      // is available or not
     169      if (enableStickyColumn)
     170      {
     171        // We display the "Sticky column" and "Presets" side-by-side
     172        %>
     173        <td>
     174        <b>Sticky column</b><br>
     175        <select name="sticky" id="sticky" style="width: calc(100% - 10px);"></select>
     176        </td>
     177        <td></td>
     178        <td>
     179        <b>Presets</b><br>
     180        <table style="width: 100%;">
     181        <tr>
     182        <td>
     183        <%
     184      }
     185      else
     186      {
     187        // We display the "Presets" centered
     188        %>
     189        <td colspan="3">
    163190        <table style="margin-left: auto; margin-right: auto;">
    164191        <tr>
    165         <td>
    166           <b>Presets</b>
    167           <select name="presets" id="presets">
    168             <option value="">-- predefined --
    169             <option value="all">All
    170             <option value="_minimal_">Required
    171             <option value="_current_">Current
    172             <%
    173             if (defaultColumns != null)
     192        <td style="padding-right: 0.5em;"><b>Presets</b></td>
     193        <td>
     194        <%
     195      }
     196      %>
     197      <select name="presets" id="presets" style="width: calc(100% - 10px);">
     198        <option value="">-- predefined --
     199        <option value="all">All
     200        <option value="_minimal_">Required
     201        <option value="_current_">Current
     202        <%
     203        if (defaultColumns != null)
     204        {
     205          %>
     206          <option value="_default_">Default
     207          <%
     208        }
     209        %>
     210        <option value="">-- user defined --
     211        <%
     212        Enumeration<Integer, String> contexts = sc.getContextNames(itemType, subContext);
     213        for (int i = 0; i < contexts.size(); ++i)
     214        {
     215          ItemContext context = sc.getContext(contexts.getKey(i));
     216          if (context != null && !ItemContext.DEFAULT_NAME.equals(context.getName()))
     217          {
     218            String columns = context.getSetting(settingName);
     219            String stickyColumn = context.getSetting(settingName+".sticky");
     220            if (columns != null)
    174221            {
    175222              %>
    176               <option value="_default_">Default
     223              <option value="<%=columns%>"
     224              <%if (stickyColumn != null){%>
     225              data-sticky-column="<%=stickyColumn%>"
     226              <%}%>
     227              ><%=HTML.encodeTags(context.getName())%>
    177228              <%
    178229            }
    179             %>
    180             <option value="">-- user defined --
    181             <%
    182             Enumeration<Integer, String> contexts = sc.getContextNames(itemType, subContext);
    183             for (int i = 0; i < contexts.size(); ++i)
    184             {
    185               ItemContext context = sc.getContext(contexts.getKey(i));
    186               if (context != null && !ItemContext.DEFAULT_NAME.equals(context.getName()))
    187               {
    188                 String columns = context.getSetting(settingName);
    189                 if (columns != null)
    190                 {
    191                   %>
    192                   <option value="<%=columns%>"><%=HTML.encodeTags(context.getName())%>
    193                   <%
    194                 }
    195               }
    196             }
    197             %>
    198           </select>
    199           </td>
    200           <%
    201           if (request.getParameter("nosavedelete") == null)
    202           {
    203             %>
    204             <td><base:button id="btnSavePreset" title="Save as&hellip;" /></td>
    205             <%
    206230          }
    207           %>
    208         </tr>
    209         </table>
    210 
    211         <div class="padded" style="text-align: right;">
    212           <b>×</b> = This column cannot be hidden
    213         </div>
    214 
    215       </td>
     231        }
     232        %>
     233      </select>
     234      </td>
     235      <%
     236      if (request.getParameter("nosavedelete") == null)
     237      {
     238        %>
     239        <td><base:button id="btnSavePreset" title="Save as&hellip;" /></td>
     240        <%
     241      }
     242      %>
     243      </tr>
     244      </table>
     245      </td>
     246    </tr>
     247    <tr>
     248    <td colspan="4" >
     249      <div class="padded" style="text-align: right;">
     250        <b>×</b> = This column cannot be hidden
     251      </div>
     252    </td>
    216253    </tr>
    217254    </table>
  • branches/3.18-stable/www/common/columns/save_preset.jsp

    r6607 r7957  
    4242final String columns = request.getParameter("columns");
    4343final String settingName = Values.getString(request.getParameter("settingName"), "columns");
     44final String stickyColumn = Values.getStringOrNull(request.getParameter("stickyColumn"));
    4445%>
    4546<base:page type="popup" title="Save preset">
     
    5556  <input type="hidden" name="subcontext" value="<%=subContext%>">
    5657  <input type="hidden" name="settingName" value="<%=settingName%>">
    57 
    58  
     58  <%
     59  if (stickyColumn != null)
     60  {
     61    %>
     62    <input type="hidden" name="stickyColumn" value="<%=HTML.encodeTags(stickyColumn)%>">
     63    <%
     64  }
     65  %>
    5966  <div class="content">
    6067    <table class="fullform input100 smaller bottomborder">
  • branches/3.18-stable/www/common/columns/submit_preset.jsp

    r6192 r7957  
    5454final String name = request.getParameter("name");
    5555final String settingName = Values.getString(request.getParameter("settingName"), "columns");
     56final String stickyColumn = Values.getStringOrNull(request.getParameter("stickyColumn"));
    5657final ItemContext cc = sc.getCurrentContext(itemType, subContext);
    5758String forward = null;
     
    6263  String columns = request.getParameter("columns");
    6364  cc.setSetting(settingName, columns);
     65  if (stickyColumn != null) cc.setSetting(settingName+".sticky", stickyColumn);
    6466  sc.saveCurrentContextAs(itemType, subContext, name, true, false);
    6567}
  • branches/3.18-stable/www/include/scripts/table.js

    r7936 r7957  
    841841    @param columns Comma-separated list of column ID:s of the visible columns, or the value 'all'
    842842  */
    843   table.setColumns = function(tableDiv, columns)
    844   {
    845     tableDiv = Doc.element(tableDiv);
    846     var frm = document.forms[tableDiv.id];
     843  table.setColumns = function(tableDiv, columns, stickyColumn)
     844  {
     845    tableDiv = Doc.element(tableDiv);
     846    var frm = document.forms[tableDiv.id];
     847    var submit = false;
    847848    if (frm.columns.value != columns)
    848849    {
    849850      frm.columns.value = columns;
    850       Forms.submit(frm);
    851     }
     851      submit = true;
     852    }
     853    if (stickyColumn && frm.sticky_column && frm.sticky_column.value != stickyColumn)
     854    {
     855      frm.sticky_column.value = stickyColumn;
     856      submit = true;
     857    }   
     858    if (submit) Forms.submit(frm);
    852859  }
    853860
     
    880887  }
    881888 
     889  table.getStickyColumn = function(tableDiv)
     890  {
     891    tableDiv = Doc.element(tableDiv);
     892    var frm = document.forms[tableDiv.id];
     893    return frm.sticky_column ? frm.sticky_column.value : null;
     894  }
    882895 
    883896  /**
     
    928941  {
    929942    tableDiv = Doc.element(tableDiv);
     943    var frm = document.forms[tableDiv.id];
    930944    var itemType = Data.get(tableDiv, 'item-type');
    931945    var subContext = Data.get(tableDiv, 'subcontext', '');
     
    939953    if (enableRelatedItemColumns) url += '&enableRelatedItemColumns=1';
    940954    if (!disableLinkedItemColumns) url += '&enableLinkedItemColumns=1';
     955    if (frm.sticky_column) url += '&enableStickyColumn=1';
    941956
    942957    if (settingName) url += '&settingName='+settingName;
  • branches/3.18-stable/www/views/rawbioassays/list_rawbioassays.jsp

    r7935 r7957  
    204204      data-inherited-annotations="true"
    205205      data-relateditem-columns="true"
    206       stickyheaders="name"
     206      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    207207      >
    208208      <tbl:hidden
Note: See TracChangeset for help on using the changeset viewer.