|
[opennms-cvs] CVS: opennms/src/web/web/admin/userGroupView/users list.jsp,1.14,1.15 modifyUser.jsp,1.22,1.23 newPassword.jsp,1.7,1.8 newUser.jsp,1.11,1.12 userDetail.jsp,1.13,1.14
From: DJ Gregor <djgregor@us...> - 2006-01-14 04:27
|
Update of /cvsroot/opennms/opennms/src/web/web/admin/userGroupView/users In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11086/admin/userGroupView/users Modified Files: list.jsp modifyUser.jsp newPassword.jsp newUser.jsp userDetail.jsp Log Message: Massive clean-up of the webUI. Move more common elements of the top and bottom of the pages to the header and footer. Use CSS layout within the page content where its relatively easy to migrate now (the rest will be done later). Do better error detection in a number of places. Cleanup the CSS stylesheet and standardize a bit. Probably broke a few things. Index: list.jsp =================================================================== RCS file: /cvsroot/opennms/opennms/src/web/web/admin/userGroupView/users/list.jsp,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- list.jsp 22 Aug 2005 19:55:18 -0000 1.14 +++ list.jsp 14 Jan 2006 04:26:41 -0000 1.15 @@ -1,4 +1,4 @@ -<!-- +<%-- // // This file is part of the OpenNMS(R) Application. @@ -37,9 +37,12 @@ // http://www.opennms.com/ // ---> +--%> -<%@page language="java" contentType = "text/html" session = "true" %> +<%@page language="java" + contentType="text/html" + session="true" +%> <%@page import="java.util.*" %> <%@page import="javax.servlet.*" %> <%@page import="org.opennms.netmgt.config.*" %> @@ -59,12 +62,16 @@ throw new ServletException("User:list " + e.getMessage()); } %> -<html> -<head> - <title>List | User Admin | OpenNMS Web Console</title> - <base HREF="<%=org.opennms.web.Util.calculateUrlBase( request )%>" /> - <link rel="stylesheet" type="text/css" href="css/styles.css" /> -</head> + +<jsp:include page="/includes/header.jsp" flush="false" > + <jsp:param name="title" value="User Configuration" /> + <jsp:param name="headTitle" value="List" /> + <jsp:param name="headTitle" value="Users" /> + <jsp:param name="headTitle" value="Admin" /> + <jsp:param name="breadcrumb" value="<a href='admin/index.jsp'>Admin</a>" /> + <jsp:param name="breadcrumb" value="<a href='admin/userGroupView/index.jsp'>Users and Groups</a>" /> + <jsp:param name="breadcrumb" value="User List" /> +</jsp:include> <script language="Javascript" type="text/javascript" > @@ -110,40 +117,25 @@ </script> -<body marginwidth="0" marginheight="0" LEFTMARGIN="0" RIGHTMARGIN="0" TOPMARGIN="0"> -<% String breadcrumb1 = "<a href='admin/index.jsp'>Admin</a>"; %> -<% String breadcrumb2 = "<a href='admin/userGroupView/index.jsp'>Users and Groups</a>"; %> -<% String breadcrumb3 = "User List"; %> -<jsp:include page="/includes/header.jsp" flush="false" > - <jsp:param name="title" value="User Configuration" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb1%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb2%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb3%>" /> -</jsp:include> - -<FORM METHOD="POST" NAME="allUsers"> +<form method="post" name="allUsers"> <input type="hidden" name="redirect"/> <input type="hidden" name="userID"/> <input type="hidden" name="newID"/> <input type="hidden" name="password"/> -<br> -<table width="100%" border="0" cellspacing="0" cellpadding="2" > - <tr> - <td> </td> - - <td> - <h3>User Configuration</h3> - - <p>Click on the <i>User ID</i> link to view detailed information about a user.</p> - - <table> - <tr> - <td valign="center"><a id="doNewUser" href="javascript:addNewUser()"><img src="images/add1.gif" alt="Add new user" border="0"></a></td> - <td valign="center"><a href="javascript:addNewUser()">Add New User</a></td> - </tr> - </table> +<h3>User Configuration</h3> + +<p> + Click on the <i>User ID</i> link to view detailed information about a + user. +</p> + +<a id="doNewUser" href="javascript:addNewUser()"><img src="images/add1.gif" alt="Add new user" border="0"></a> +<a href="javascript:addNewUser()">Add New User</a> + +<br/> +<br/> <table width="100%" border="1" cellspacing="0" cellpadding="2" bordercolor="black"> @@ -259,17 +251,7 @@ <% row++; } %> </table> - </td> - - <td> </td> - </tr> -</table> - -</FORM> -<br> +</form> <jsp:include page="/includes/footer.jsp" flush="false" /> - -</body> -</html> Index: modifyUser.jsp =================================================================== RCS file: /cvsroot/opennms/opennms/src/web/web/admin/userGroupView/users/modifyUser.jsp,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- modifyUser.jsp 23 Dec 2005 06:29:37 -0000 1.22 +++ modifyUser.jsp 14 Jan 2006 04:26:41 -0000 1.23 @@ -1,4 +1,4 @@ -<!-- +<%-- // // This file is part of the OpenNMS(R) Application. @@ -37,9 +37,12 @@ // http://www.opennms.com/ // ---> +--%> -<%@page language="java" contentType = "text/html" session = "true" %> +<%@page language="java" + contentType="text/html" + session="true" +%> <%@page import="java.util.*"%> <%@page import="java.text.*"%> <%@page import="org.opennms.netmgt.config.*"%> @@ -63,12 +66,17 @@ } %> -<html> -<head> -<title>Modify User | User Admin | OpenNMS Web Console</title> -<base HREF="<%=org.opennms.web.Util.calculateUrlBase( request )%>" /> -<link rel="stylesheet" type="text/css" href="css/styles.css" /> -</head> + +<jsp:include page="/includes/header.jsp" flush="false" > + <jsp:param name="title" value="Modify User" /> + <jsp:param name="headTitle" value="Modify" /> + <jsp:param name="headTitle" value="Users" /> + <jsp:param name="headTitle" value="Admin" /> + <jsp:param name="breadcrumb" value="<a href='admin/index.jsp'>Admin</a>" /> + <jsp:param name="breadcrumb" value="<a href='admin/userGroupView/index.jsp'>Users and Groups</a>" /> + <jsp:param name="breadcrumb" value="<a href='admin/userGroupView/users/list.jsp'>User List</a>" /> + <jsp:param name="breadcrumb" value="Modify User" /> +</jsp:include> <script language="Javascript" type="text/javascript" > @@ -163,45 +171,21 @@ </script> -<body marginwidth="0" marginheight="0" LEFTMARGIN="0" RIGHTMARGIN="0" TOPMARGIN="0"> -<%String breadcrumb1 = "<a href='admin/index.jsp'>Admin</a>"; - %> -<%String breadcrumb2 = "<a href='admin/userGroupView/index.jsp'>Users and Groups</a>"; - %> -<%String breadcrumb3 = "<a href='admin/userGroupView/users/list.jsp'>User List</a>"; - %> -<%String breadcrumb4 = "Modify User"; - %> -<jsp:include page="/includes/header.jsp" flush="false" > - <jsp:param name="title" value="Modify User" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb1%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb2%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb3%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb4%>" /> -</jsp:include> - -<br/> - -<FORM id="modifyUser" METHOD="POST" NAME="modifyUser"> +<form id="modifyUser" method="post" name="modifyUser"> <input id="userID" type="hidden" name="userID" value="<%=user.getUserId()%>"/> <input id="password" type="hidden" name="password"/> <input id="redirect" type="hidden" name="redirect"/> +<h3>Modify User: <%=userid%></h3> -<table width="100%" border="0" cellspacing="0" cellpadding="2" > - <tr> - <td> </td> - - <td> - <h3>Modify User: <%=userid%></h3> - - <table width="100%" border="0" cellspacing="0" cellpadding="2" > - <tr> - <td width="50%" valign="top"> - <p><input type="button" value="Reset Password" onClick="resetPassword()" /></p> +<div id="contentleft"> + <p> + <input type="button" value="Reset Password" onClick="resetPassword()" /> + </p> - <p><table width="100%" border="0" cellspacing="0" cellpadding="2"> + <p> + <table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td colspan="2"> <p><b>User Information</b></p> @@ -317,40 +301,59 @@ </td> </tr> </table> - </td> - <td width="15"> </td> - <td width="50%" valign="top"> - <p>This panel allows you to modify information for each user, including their name, - notification information, and duty schedules.</p> - - <p><b>Notification Information</b> provides the ability for you to configure contact - information for each user, including any of <em>email</em> address, <em>pager email</em> - (in the case that the pager can be reached as an email destination), <em>XMPP address</em> - (for instant messages using the Jabber XMPP protocol), <em>numeric service</em> - (for pagers that cannot display text messages), and <em>text service</em> (for alphanumeric pagers).</p> - - <p><b>Duty Schedules</b> allow you to flexibility to determine when users should receive - notifications. A duty schedule consists of a list of days for which the time will apply - and a time range, presented in military time with no punctuation. Using this standard, days - run from <em>0000</em> to <em>2359</em>.</p> - - <p>If your duty schedules span midnight, or if your users work multiple, noncontiniguous - time periods, you will need to configure multiple duty schedules. To do so, select the - number of duty schedules to add from the drop-down box next to <b>[Add This Many Schedules]</b>, - and click the button. Then, using the duty schedule fields you've just added, create a - duty schedule from the start time to 2359 on one day, and enter a second duty schedule - which begins at 0000 and ends at the end of that users coverage.</p> - - <p>To remove configured duty schedules, put a check in the <em>Delete</em> column and click - <b>[Remove Checked Schedules]</b>.</p> - - <p>To save your configuration, click on <b>[Finish]</b>.</p> - </td> - </tr> - - <tr> - <td width="100%" colspan="3"> - <p><b>Duty Schedules</b></p> + </p> +</div> + +<div id="contentright"> + <p> + This panel allows you to modify information for each user, including + their name, notification information, and duty schedules. + </p> + + <p> + <b>Notification Information</b> provides the ability for you to configure + contact information for each user, including any of <em>email</em> + address, <em>pager email</em> (in the case that the pager can be reached + as an email destination), <em>XMPP address</em> (for instant messages + using the Jabber XMPP protocol), <em>numeric service</em> (for pagers + that cannot display text messages), and <em>text service</em> (for + alphanumeric pagers). + </p> + + <p> + <b>Duty Schedules</b> allow you to flexibility to determine when users + should receive notifications. A duty schedule consists of a list of + days for which the time will apply and a time range, presented in + military time with no punctuation. Using this standard, days run from + <em>0000</em> to <em>2359</em>. + </p> + + <p> + If your duty schedules span midnight, or if your users work multiple, + non-contiguous time periods, you will need to configure multiple duty + schedules. To do so, select the number of duty schedules to add from + the drop-down box next to <b>[Add This Many Schedules]</b>, and click + the button. Then, using the duty schedule fields you've just added, + create a duty schedule from the start time to 2359 on one day, and + enter a second duty schedule which begins at 0000 and ends at the end + of that users coverage. + </p> + + <p> + To remove configured duty schedules, put a check in the <em>Delete</em> + column and click <b>[Remove Checked Schedules]</b>. + </p> + + <p> + To save your configuration, click on <b>[Finish]</b>. + </p> +</div> + +<div class="spacer"></div> + +<p> + <b>Duty Schedules</b> +</p> <% Collection dutySchedules = user.getDutyScheduleCollection(); %> @@ -404,12 +407,12 @@ } %> </table> - </td> - </tr> - </table> - <p><input id="addSchedulesButton" type="button" name="addSchedule" value="Add This Many Schedules" onclick="addDutySchedules()"/> - <select name="numSchedules" value="3" size="1"> +<p> + <input id="addSchedulesButton" type="button" name="addSchedule" + value="Add This Many Schedules" onclick="addDutySchedules()"/> + + <select name="numSchedules" value="3" size="1"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> @@ -417,19 +420,22 @@ <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> - </select> - </p> + </select> +</p> - <p><input id="removeSchedulesButton" type="button" name="addSchedule" value="Remove Checked Schedules" onclick="removeDutySchedules()"/></p> - <p><input id="saveUserButton" type="button" name="finish" value="Finish" onclick="saveUser()"/> <input id="cancelButton" type="button" name="cancel" value="Cancel" onclick="cancelUser()"/></p> - </tr> -</table> +<p> + <input id="removeSchedulesButton" type="button" name="addSchedule" + value="Remove Checked Schedules" onclick="removeDutySchedules()"/> +</p> + +<p> + <input id="saveUserButton" type="button" name="finish" value="Finish" + onclick="saveUser()"/> + + <input id="cancelButton" type="button" name="cancel" value="Cancel" + onclick="cancelUser()"/> +</p> -</FORM> - -<br/> +</form> <jsp:include page="/includes/footer.jsp" flush="false" /> - -</body> -</html> Index: newPassword.jsp =================================================================== RCS file: /cvsroot/opennms/opennms/src/web/web/admin/userGroupView/users/newPassword.jsp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- newPassword.jsp 20 Apr 2005 20:40:56 -0000 1.7 +++ newPassword.jsp 14 Jan 2006 04:26:41 -0000 1.8 @@ -1,4 +1,4 @@ -<!-- +<%-- // // This file is part of the OpenNMS(R) Application. @@ -32,18 +32,25 @@ // http://www.opennms.com/ // ---> +--%> -<%@page language="java" contentType = "text/html" session = "true" import="org.opennms.netmgt.config.*, java.util.*,org.opennms.netmgt.config.users.*"%> +<%@page language="java" + contentType="text/html" + session="true" + import="org.opennms.netmgt.config.*, + java.util.*, + org.opennms.netmgt.config.users.* + " +%> + +<jsp:include page="/includes/header.jsp" flush="false" > + <jsp:param name="title" value="New Password" /> + <jsp:param name="headTitle" value="New Password" /> + <jsp:param name="headTitle" value="Users" /> + <jsp:param name="headTitle" value="Admin" /> + <jsp:param name="quiet" value="true" /> +</jsp:include> -<html> -<head> - <title>New User Password | User Admin | OpenNMS Web Console</title> - <base HREF="<%=org.opennms.web.Util.calculateUrlBase( request )%>" /> - <link rel="stylesheet" type="text/css" href="css/styles.css" /> -</head> - -<body marginwidth="0" marginheight="0" LEFTMARGIN="0" RIGHTMARGIN="0" TOPMARGIN="0"> <script language="JavaScript"> function verifyGoForm() @@ -61,8 +68,10 @@ } </script> -<br> -<h3>Please enter the New Password and Confirm.</h3><br> +<h3>Please enter the New Password and Confirm.</h3> + +<br/ +> <form method="post" name="goForm"> <table> @@ -93,10 +102,13 @@ </tr> </table> </form> -<P> -Note: Be sure to click "Finish" at the bottom of the user page to save changes. -</P> +<p> + Note: Be sure to click "Finish" at the bottom of the user page to save + changes. +</p> + +<jsp:include page="/includes/footer.jsp" flush="false" > + <jsp:param name="quiet" value="true" /> +</jsp:include> -</body> -</html> Index: newUser.jsp =================================================================== RCS file: /cvsroot/opennms/opennms/src/web/web/admin/userGroupView/users/newUser.jsp,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- newUser.jsp 20 Apr 2005 20:40:56 -0000 1.11 +++ newUser.jsp 14 Jan 2006 04:26:41 -0000 1.12 @@ -1,4 +1,4 @@ -<!-- +<%-- // // This file is part of the OpenNMS(R) Application. @@ -37,31 +37,24 @@ // http://www.opennms.com/ // ---> +--%> <%@page language="java" contentType="text/html" session="true" - import="org.opennms.netmgt.config.*,java.util.*,org.opennms.netmgt.config.users.*"%> + import="org.opennms.netmgt.config.*, + java.util.*, + org.opennms.netmgt.config.users.* + " +%> -<html> -<head> -<title>New User Info | User Admin | OpenNMS Web Console</title> -<base HREF="<%=org.opennms.web.Util.calculateUrlBase( request )%>" /> -<link rel="stylesheet" type="text/css" href="css/styles.css" /> -</head> - -<body marginwidth="0" marginheight="0" LEFTMARGIN="0" RIGHTMARGIN="0" - TOPMARGIN="0"> - -<% String breadcrumb1 = "<a href='admin/index.jsp'>Admin</a>"; %> -<% String breadcrumb2 = "<a href='admin/userGroupView/index.jsp'>Users and Groups</a>"; %> -<% String breadcrumb3 = "<a href='admin/userGroupView/users/list.jsp'>User List</a>"; %> -<% String breadcrumb4 = "New User"; %> <jsp:include page="/includes/header.jsp" flush="false"> <jsp:param name="title" value="New User" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb1%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb2%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb3%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb4%>" /> + <jsp:param name="headTitle" value="New" /> + <jsp:param name="headTitle" value="Users" /> + <jsp:param name="headTitle" value="Admin" /> + <jsp:param name="breadcrumb" value="<a href='admin/index.jsp'>Admin</a>" /> + <jsp:param name="breadcrumb" value="<a href='admin/userGroupView/index.jsp'>Users and Groups</a>" /> + <jsp:param name="breadcrumb" value="<a href='admin/userGroupView/users/list.jsp'>User List</a>" /> + <jsp:param name="breadcrumb" value="New User" /> </jsp:include> <script language="JavaScript"> @@ -94,45 +87,35 @@ </script> -<br> +<%if ("redo".equals(request.getParameter("action"))) { %> + <h3>The user <%=request.getParameter("userID")%> already exists. + Please type in a different user id.</h3> +<%} else { %> + <h3>Please enter a user id and password below.</h3> +<%}%> <form id="newUserForm" method="post" name="newUserForm"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> - <tr> - <td> </td> - - <td><%if (request.getParameter("action").equals("redo")) { %> - <h3>The user <%=request.getParameter("userID")%> already exists. - Please type in a different user id.</h3> - <%} else { %> - <h3>Please enter a user id and password below.</h3> - <%}%> - <table> - <tr> - <td width="10%"><label id="userIDLabel" for="userID">User ID:</label></td> - <td width="100%"><input id="userID" type="text" name="userID"></td> - </tr> - - <tr> - <td width="10%"><label id="pass1Label" for="password1">Password:</label></td> - <td width="100%"><input id="pass1" type="password" name="pass1"></td> - </tr> - - <tr> - <td width="10%"><label id="pass2Label" for="password2">Confirm Password:</label></td> - <td width="100%"><input id="pass2" type="password" name="pass2"></td> - </tr> - - <tr> - <td><input id="doOK" type="button" value="OK" onClick="validateFormInput()"></td> - <td><input id="doCancel" type="button" value="Cancel" onClick="cancelUser()"></td> - </tr> - </table> - </td> - </tr> + <table> + <tr> + <td width="10%"><label id="userIDLabel" for="userID">User ID:</label></td> + <td width="100%"><input id="userID" type="text" name="userID"></td> + </tr> + + <tr> + <td width="10%"><label id="pass1Label" for="password1">Password:</label></td> + <td width="100%"><input id="pass1" type="password" name="pass1"></td> + </tr> + + <tr> + <td width="10%"><label id="pass2Label" for="password2">Confirm Password:</label></td> + <td width="100%"><input id="pass2" type="password" name="pass2"></td> + </tr> + + <tr> + <td><input id="doOK" type="button" value="OK" onClick="validateFormInput()"></td> + <td><input id="doCancel" type="button" value="Cancel" onClick="cancelUser()"></td> + </tr> </table> </form> -<br> <jsp:include page="/includes/footer.jsp" flush="false" /> -</body> -</html> +<jsp:include page="/includes/footer.jsp" flush="false" /> Index: userDetail.jsp =================================================================== RCS file: /cvsroot/opennms/opennms/src/web/web/admin/userGroupView/users/userDetail.jsp,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- userDetail.jsp 23 Dec 2005 06:29:37 -0000 1.13 +++ userDetail.jsp 14 Jan 2006 04:26:41 -0000 1.14 @@ -1,4 +1,4 @@ -<!-- +<%-- // // This file is part of the OpenNMS(R) Application. @@ -37,51 +37,47 @@ // http://www.opennms.com/ // ---> +--%> + +<%@page language="java" + contentType="text/html" + session="true" + import="org.opennms.netmgt.config.*, + java.util.*, + java.text.*, + org.opennms.netmgt.config.users.*, + org.opennms.web.MissingParameterException + " +%> -<%@page language="java" contentType = "text/html" session = "true" import="org.opennms.netmgt.config.*, java.util.*,java.text.*,org.opennms.netmgt.config.users.*"%> <% User user = null; UserManager userFactory = UserFactory.getInstance(); String userID = request.getParameter("userID"); - try - { + if (userID == null) { + throw new MissingParameterException("userID"); + } + + try { UserFactory.init(); user = userFactory.getUser(userID); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServletException("Could not find user " + userID + " in user factory.", e); } + + if (user == null) { + throw new ServletException("Could not find user " + userID); + } %> -<html> -<head> -<title>User Detail | User Admin | OpenNMS Web Console</title> -<base HREF="<%=org.opennms.web.Util.calculateUrlBase( request )%>" /> -<link rel="stylesheet" type="text/css" href="css/styles.css" /> -</head> - -<body marginwidth="0" marginheight="0" LEFTMARGIN="0" RIGHTMARGIN="0" TOPMARGIN="0"> - -<% String breadcrumb1 = "<a href='admin/index.jsp'>Admin</a>"; %> -<% String breadcrumb2 = "<a href='admin/userGroupView/index.jsp'>Users and Groups</a>"; %> -<% String breadcrumb3 = "<a href='admin/userGroupView/users/list.jsp'>User List</a>"; %> -<% String breadcrumb4 = "User Detail"; %> + <jsp:include page="/includes/header.jsp" flush="false" > <jsp:param name="title" value="User Detail" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb1%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb2%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb3%>" /> - <jsp:param name="breadcrumb" value="<%=breadcrumb4%>" /> + <jsp:param name="breadcrumb" value="<a href='admin/index.jsp'>Admin</a>" /> + <jsp:param name="breadcrumb" value="<a href='admin/userGroupView/index.jsp'>Users and Groups</a>" /> + <jsp:param name="breadcrumb" value="<a href='admin/userGroupView/users/list.jsp'>User List</a>" /> + <jsp:param name="breadcrumb" value="User Detail" /> </jsp:include> -<br> - -<table width="100%" border="0" cellspacing="0" cellpadding="2" > - <tr> - <td> </td> - - <td> <table width="100%" border="0" cellspacing="0" cellpadding="2" > <tr> <td> @@ -227,14 +223,6 @@ </table> </table> - </td> - <td> </td> - </tr> - </table> -<br> <jsp:include page="/includes/footer.jsp" flush="false" /> - -</body> -</html> |
| Thread | Author | Date |
|---|---|---|
| [opennms-cvs] CVS: opennms/src/web/web/admin/userGroupView/users list.jsp,1.14,1.15 modifyUser.jsp,1.22,1.23 newPassword.jsp,1.7,1.8 newUser.jsp,1.11,1.12 userDetail.jsp,1.13,1.14 | DJ Gregor <djgregor@us...> |