Changeset 7500


Ignore:
Timestamp:
Aug 8, 2018, 12:57:12 PM (3 years ago)
Author:
Nicklas Nordborg
Message:

References #2124: Add support for a third field in the login form

Added an extra field getExtraField() to the LoginFormAction interface. A default implementation should provide backwards compatibility to existing implementations.

The login forms have been updated to display the extra field if it is present. The entered value is added to the LoginRequest as an attribute with name extraValue.

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/clients/web/net/sf/basedb/clients/web/extensions/login/LoginFormAction.java

    r6426 r7500  
    5151 
    5252  /**
     53    An optional extra field on the login form.
     54    A default implementation that returns null
     55    is provided by this interface to provide
     56    backwards compatibility.
     57    @since 3.13
     58  */
     59  public default FieldInfo getExtraField()
     60  {
     61    return null;
     62  }
     63 
     64  /**
    5365    If TRUE, the browser is asked to remember the last login used.
    5466  */
  • trunk/src/clients/web/net/sf/basedb/clients/web/extensions/login/LoginFormBean.java

    r6426 r7500  
    3535  private FieldInfo loginField;
    3636  private FieldInfo passwordField;
     37  private FieldInfo extraField;
    3738  private boolean rememberLastLogin;
    3839
     
    7475
    7576  @Override
     77  public FieldInfo getExtraField()
     78  {
     79    return extraField;
     80  }
     81 
     82  public void setExtraField(FieldInfo extraField)
     83  {
     84    this.extraField = extraField;
     85  }
     86
     87 
     88  @Override
    7689  public boolean rememberLastLogin()
    7790  {
  • trunk/www/exception/not_logged_in.jsp

    r7408 r7500  
    8989  FieldInfo loginField = loginAction.getLoginField();
    9090  FieldInfo passwordField = loginAction.getPasswordField();
     91  FieldInfo extraField = loginAction.getExtraField();
    9192  %>
    9293  <base:page type="default" menu="exception" title="Not logged in">
     
    132133                  <%=loginAction.rememberLastLogin() ? "" : "autocomplete=\"off\" data-use-last-login=\"0\""%>
    133134                  maxlength="100"
    134                   tabindex="0">
     135                  tabindex="1">
    135136                </td>
    136137              </tr>
     
    143144                  <%=valueIfNotNull("placeholder=\"", passwordField.getPlaceHolder(), "\"") %>
    144145                  maxlength="80"
    145                   tabindex="0">
    146                 </td>
    147                 <td>
     146                  tabindex="2">
     147                </td>
     148                <td <%=extraField != null?"rowspan=\"2\"" : "" %> style="vertical-align: bottom;">
    148149                  <base:buttongroup>
    149                     <base:button id="btnLogin" image="login.png" title="Login" />
    150                     <base:button id="close" title="Cancel" />
     150                    <base:button id="btnLogin" image="login.png" title="Login" tabindex="4"/>
     151                    <base:button id="close" title="Cancel" tabindex="5" />
    151152                  </base:buttongroup>
    152153                </td>
    153154              </tr>
     155              <%
     156              if (extraField != null)
     157              {
     158                %>
     159                <tr <%=valueIfNotNull("class=\"", extraField.getClazz(), "\"")%> id="extra-row">
     160                  <th class="bg-filled-100"><%=extraField.getPrompt() %></th>
     161                  <td><input class="text" name="extraField" id="extraField"
     162                    type="<%=extraField.hasHiddenCharacters() ? "password" : "text"%>"
     163                    <%=valueIfNotNull("style=\"", extraField.getStyle(), "\"") %>
     164                    <%=valueIfNotNull("title=\"", extraField.getTooltip(), "\"") %>
     165                    <%=valueIfNotNull("placeholder=\"", extraField.getPlaceHolder(), "\"") %>
     166                    maxlength="80"
     167                    tabindex="3">
     168                  </td>
     169                </tr>
     170                <%
     171              }
     172              %>
    154173              <tr>
    155174                <th class="bg-filled-100"></th>
  • trunk/www/login.js

    r7428 r7500  
    4444    Buttons.addClickHandler('close', App.closeWindow);
    4545   
    46     // Password field should login if 'ENTER' is pressed
    47     Events.doOnEnter('password', login.doLogin);
     46    var extraField = Doc.element('extraField');
     47    if (extraField == null)
     48    {
     49      // Password field should login if 'ENTER' is pressed
     50      Events.doOnEnter('password', login.doLogin);
     51    }
     52    else
     53    {
     54      // Password field should move focus to the 'extraField' if 'ENTER' is pressed
     55      Events.doOnEnter('password', login.setFocus);
     56      Events.doOnEnter(extraField, login.doLogin);
     57    }
    4858   
    4959    login.initForm();
     
    7585    if (pUseLastLogin)
    7686    {
    77       var lastLogin = this.getLastLogin();
     87      var lastLogin = login.getLastLogin();
    7888      if (!frm.login.value && lastLogin)
    7989      {
     
    123133 
    124134  /**
    125     Set focus on the login field if empty, otherwise the password field.
     135    Set focus on the login field if empty, otherwise the password field
     136    or the extraField
    126137  */
    127138  login.setFocus = function()
    128139  {
    129140    var frm = document.forms[pLoginForm];
     141    var fieldToFocus = null;
    130142    if (!frm.login.value)
    131143    {
    132       frm.login.focus();
    133       frm.login.select();
     144      fieldToFocus = frm.login;
     145    }
     146    else if (frm.password.value && frm.extraField)
     147    {
     148      fieldToFocus = frm.extraField;
    134149    }
    135150    else
    136151    {
    137       frm.password.focus();
    138       frm.password.select();
    139     }
     152      fieldToFocus = frm.password;
     153    }
     154    fieldToFocus.focus();
     155    fieldToFocus.select();
    140156  }
    141157 
     
    148164    frm.login.disabled = false;
    149165    frm.password.disabled = false;
     166    if (frm.extraField) frm.extraField.disabled = false;
    150167    Doc.hide('btnLoginAnyway');
    151168    Doc.removeClass('btnLogin', 'disabled');
    152     this.setFocus();
     169    login.setFocus();
    153170  }
    154171 
  • trunk/www/login.jsp

    r7410 r7500  
    6666    String password = request.getParameter("password");
    6767    String deviceToken = Values.getStringOrNull(request.getParameter("deviceToken"));
     68    String extraValue = Values.getStringOrNull(request.getParameter("extraField"));
    6869    try
    6970    {
    7071      if (sc.isLoggedIn()) sc.logout();
    7172      LoginRequest loginRequest = new LoginRequest(login, password, deviceToken);
     73      if (extraValue != null) loginRequest.setAttribute("extraValue", extraValue);
    7274      loginRequest.setAttribute("user-agent", request.getHeader("User-Agent"));
    7375      String serverUrl = request.getRequestURL().toString().replace(request.getRequestURI(), root);
  • trunk/www/main.jsp

    r7408 r7500  
    102102  FieldInfo loginField = loginAction.getLoginField();
    103103  FieldInfo passwordField = loginAction.getPasswordField();
     104  FieldInfo extraField = loginAction.getExtraField();
    104105  %>
    105106  <base:page type="default">
     
    150151                <%=loginAction.rememberLastLogin() ? "" : "autocomplete=\"off\" data-use-last-login=\"0\""%>
    151152                maxlength="100"
    152                 tabindex="0">
     153                tabindex="1">
    153154              </td>
    154155            </tr>
     
    162163                <%=valueIfNotNull("placeholder=\"", passwordField.getPlaceHolder(), "\"") %>
    163164                maxlength="80"
    164                 tabindex="0">
     165                tabindex="2">
    165166              </td>
    166               <td><base:button
     167              <td <%=extraField != null?"rowspan=\"2\"" : "" %> style="vertical-align: bottom;"><base:button
    167168                id="btnLogin"
    168169                subclass="<%=denyLogin ? "disabled" : ""%>"
    169170                image="login.png" title="Login"
    170                 tooltip="<%=HTML.encodeTags(broadcastTitle)%>" /></td>
     171                tooltip="<%=HTML.encodeTags(broadcastTitle)%>" tabindex="4" /></td>
    171172            </tr>
     173            <%
     174            if (extraField != null)
     175            {
     176              %>
     177              <tr <%=valueIfNotNull("class=\"", extraField.getClazz(), "\"")%> id="extra-row">
     178                <th class="bg-filled-100"><%=extraField.getPrompt() %></th>
     179                <td><input class="text" name="extraField" id="extraField"
     180                  type="<%=extraField.hasHiddenCharacters() ? "password" : "text"%>"
     181                  <%=denyLogin ? "disabled" : ""%>
     182                  <%=valueIfNotNull("style=\"", extraField.getStyle(), "\"") %>
     183                  <%=valueIfNotNull("title=\"", extraField.getTooltip(), "\"") %>
     184                  <%=valueIfNotNull("placeholder=\"", extraField.getPlaceHolder(), "\"") %>
     185                  maxlength="80"
     186                  tabindex="3">
     187                </td>
     188              </tr>
     189              <%
     190            }
     191            %>
    172192            <tr>
    173193              <th class="bg-filled-100 subprompt"></th>
  • trunk/www/switch.jsp

    r7408 r7500  
    8080  FieldInfo loginField = loginAction.getLoginField();
    8181  FieldInfo passwordField = loginAction.getPasswordField();
     82  FieldInfo extraField = loginAction.getExtraField();
    8283  %>
    8384  <base:page type="popup" title="Switch user">
     
    122123        </td>
    123124      </tr>
     125      <%
     126      if (extraField != null)
     127      {
     128        %>
     129        <tr <%=valueIfNotNull("class=\"", extraField.getClazz(), "\"")%> id="extra-row">
     130          <th><%=extraField.getPrompt() %></th>
     131          <td><input class="text" name="extraField" id="extraField"
     132            type="<%=extraField.hasHiddenCharacters() ? "password" : "text"%>"
     133            <%=valueIfNotNull("style=\"", extraField.getStyle(), "\"") %>
     134            <%=valueIfNotNull("title=\"", extraField.getTooltip(), "\"") %>
     135            <%=valueIfNotNull("placeholder=\"", extraField.getPlaceHolder(), "\"") %>
     136            maxlength="80"
     137            tabindex="0">
     138          </td>
     139        </tr>
     140        <%
     141      }
     142      %>
    124143      <tr>
    125144        <th><label for="remainOnPage">Remain on this page</label></th>
Note: See TracChangeset for help on using the changeset viewer.