Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>My 100% work example, where using liferay-ui: search-container, liferay-ui: search-form and liferay-ui: search-toggle:</p> <p>My 100% work example, where using liferay-ui: search-container, liferay-ui: search-form and liferay-ui: search-toggle: <strong>view.jsp:</strong></p> <pre><code>&lt;%@ include file="/init.jsp" %&gt; &lt;% PortletURL portletURL = renderResponse.createRenderURL(); portletURL.setParameter("mvcPath", "/html/view.jsp"); pageContext.setAttribute("portletURL", portletURL); %&gt; &lt;aui:form name="searchForm" action="&lt;%= portletURL.toString() %&gt;" method="post"&gt; &lt;liferay-ui:search-container searchContainer="&lt;%= new UserSearch(renderRequest, portletURL) %&gt;" &gt; &lt;aui:input disabled="&lt;%= true %&gt;" name="usersRedirect" type="hidden" value="&lt;%= portletURL.toString() %&gt;" /&gt; &lt;% UserSearchTerms searchTerms = (UserSearchTerms)searchContainer.getSearchTerms(); UserDisplayTerms displayTerms = (UserDisplayTerms)searchContainer.getDisplayTerms(); long organizationId = searchTerms.getOrganizationId(); long userGroupId = searchTerms.getUserGroupId(); Organization organization = null; if (organizationId &gt; 0) { try { organization = OrganizationLocalServiceUtil.getOrganization(organizationId); } catch (NoSuchOrganizationException nsoe) { } } UserGroup userGroup = null; if (userGroupId &gt; 0) { try { userGroup = UserGroupLocalServiceUtil.getUserGroup(userGroupId); } catch (NoSuchUserGroupException nsuge) { } } %&gt; &lt;c:if test="&lt;%= organization != null %&gt;"&gt; &lt;aui:input name="&lt;%= UserDisplayTerms.ORGANIZATION_ID %&gt;" type="hidden" value="&lt;%= organization.getOrganizationId() %&gt;" /&gt; &lt;h3&gt;&lt;%= HtmlUtil.escape(LanguageUtil.format(pageContext, "users-of-x", organization.getName())) %&gt;&lt;/h3&gt; &lt;/c:if&gt; &lt;c:if test="&lt;%= userGroup != null %&gt;"&gt; &lt;aui:input name="&lt;%= UserDisplayTerms.USER_GROUP_ID %&gt;" type="hidden" value="&lt;%= userGroup.getUserGroupId() %&gt;" /&gt; &lt;h3&gt;&lt;%= LanguageUtil.format(pageContext, "users-of-x", HtmlUtil.escape(userGroup.getName())) %&gt;&lt;/h3&gt; &lt;/c:if&gt; &lt;liferay-ui:search-form page="/html/user_search.jsp" searchContainer="&lt;%= searchContainer %&gt;" servletContext="&lt;%= this.getServletConfig().getServletContext() %&gt;" /&gt; &lt;% LinkedHashMap userParams = new LinkedHashMap(); if (organizationId &gt; 0) { userParams.put("usersOrgs", new Long(organizationId)); } if (userGroupId &gt; 0) { userParams.put("usersUserGroups", new Long(userGroupId)); } %&gt; &lt;liferay-ui:search-container-results&gt; &lt;c:choose&gt; &lt;c:when test="&lt;%= GetterUtil.getBoolean(PropsUtil.get(PropsKeys.USERS_INDEXER_ENABLED)) &amp;&amp; GetterUtil.getBoolean(PropsUtil.get(PropsKeys.USERS_SEARCH_WITH_INDEX)) %&gt;"&gt; &lt;%@ include file="/html/user_search_results_index.jspf" %&gt; &lt;/c:when&gt; &lt;c:otherwise&gt; &lt;%@ include file="/html/user_search_results_database.jspf" %&gt; &lt;/c:otherwise&gt; &lt;/c:choose&gt; &lt;/liferay-ui:search-container-results&gt; &lt;liferay-ui:search-container-row className="com.liferay.portal.model.User" escapedModel="&lt;%= true %&gt;" keyProperty="userId" modelVar="curUser" rowIdProperty="screenName" &gt; &lt;liferay-portlet:renderURL varImpl="rowURL" windowState="&lt;%= WindowState.MAXIMIZED.toString() %&gt;"&gt; &lt;portlet:param name="mvcPath" value="/html/user_display.jsp" /&gt; &lt;portlet:param name="redirect" value="&lt;%= searchContainer.getIteratorURL().toString() %&gt;" /&gt; &lt;portlet:param name="userId" value="&lt;%= String.valueOf(curUser.getUserId()) %&gt;" /&gt; &lt;/liferay-portlet:renderURL&gt; &lt;%@ include file="/html/search_columns.jspf" %&gt; &lt;/liferay-ui:search-container-row&gt; &lt;c:if test="&lt;%= (organization != null) || (userGroup != null) %&gt;"&gt; &lt;br /&gt; &lt;/c:if&gt; &lt;c:if test="&lt;%= organization != null %&gt;"&gt; &lt;aui:input name="&lt;%= UserDisplayTerms.ORGANIZATION_ID %&gt;" type="hidden" value="&lt;%= organization.getOrganizationId() %&gt;" /&gt; &lt;liferay-ui:message key="filter-by-organization" /&gt;: &lt;%= HtmlUtil.escape(organization.getName()) %&gt;&lt;br /&gt; &lt;/c:if&gt; &lt;c:if test="&lt;%= userGroup != null %&gt;"&gt; &lt;aui:input name="&lt;%= UserDisplayTerms.USER_GROUP_ID %&gt;" type="hidden" value="&lt;%= userGroup.getUserGroupId() %&gt;" /&gt; &lt;liferay-ui:message key="filter-by-user-group" /&gt;: &lt;%= HtmlUtil.escape(userGroup.getName()) %&gt;&lt;br /&gt; &lt;/c:if&gt; &lt;div class="separator"&gt;&lt;!-- --&gt;&lt;/div&gt; &lt;liferay-ui:search-iterator /&gt; &lt;/liferay-ui:search-container&gt; &lt;/aui:form&gt; </code></pre> <p><strong>user_search.jsp:</strong></p> <pre><code>&lt;%@ include file="/init.jsp" %&gt; &lt;% UserSearch searchContainer = (UserSearch)request.getAttribute("liferay-ui:search:searchContainer"); UserDisplayTerms displayTerms = (UserDisplayTerms)searchContainer.getDisplayTerms(); %&gt; &lt;liferay-ui:search-toggle buttonLabel="search" displayTerms="&lt;%= displayTerms %&gt;" id="toggle_id_user_search" &gt; &lt;aui:fieldset&gt; &lt;aui:input name="&lt;%= displayTerms.FIRST_NAME %&gt;" size="20" type="text" value="&lt;%= displayTerms.getFirstName() %&gt;" /&gt; &lt;aui:input name="&lt;%= displayTerms.MIDDLE_NAME %&gt;" size="20" type="text" value="&lt;%= displayTerms.getMiddleName() %&gt;" /&gt; &lt;aui:input name="&lt;%= displayTerms.LAST_NAME %&gt;" size="20" type="text" value="&lt;%= displayTerms.getLastName() %&gt;" /&gt; &lt;aui:input name="&lt;%= displayTerms.SCREEN_NAME %&gt;" size="20" type="text" value="&lt;%= displayTerms.getScreenName() %&gt;" /&gt; &lt;aui:input name="&lt;%= displayTerms.EMAIL_ADDRESS %&gt;" size="20" type="text" value="&lt;%= displayTerms.getEmailAddress() %&gt;" /&gt; &lt;/aui:fieldset&gt; &lt;/liferay-ui:search-toggle&gt; </code></pre> <p><strong>user_search_results_index.jspf:</strong></p> <pre><code>&lt;%@ page import="com.liferay.portal.kernel.search.Hits" %&gt; &lt;%@ page import="com.liferay.portal.kernel.search.Sort" %&gt; &lt;%@ page import="com.liferay.portal.kernel.search.SortFactoryUtil" %&gt; &lt;%@ page import="com.liferay.portlet.usersadmin.util.UsersAdminUtil" %&gt; &lt;% userParams.put("expandoAttributes", searchTerms.getKeywords()); Sort sort = SortFactoryUtil.getSort(User.class, searchContainer.getOrderByCol(), searchContainer.getOrderByType()); while (true) { Hits hits = null; if (searchTerms.isAdvancedSearch()) { hits = UserLocalServiceUtil.search(company.getCompanyId(), searchTerms.getFirstName(), searchTerms.getMiddleName(), searchTerms.getLastName(), searchTerms.getScreenName(), searchTerms.getEmailAddress(), searchTerms.getStatus(), userParams, searchTerms.isAndOperator(), searchContainer.getStart(), searchContainer.getEnd(), sort); } else { hits = UserLocalServiceUtil.search(company.getCompanyId(), searchTerms.getKeywords(), searchTerms.getStatus(), userParams, searchContainer.getStart(), searchContainer.getEnd(), sort); } Tuple tuple = UsersAdminUtil.getUsers(hits); boolean corruptIndex = (Boolean)tuple.getObject(1); if (!corruptIndex) { results = (List&lt;User&gt;)tuple.getObject(0); total = hits.getLength(); break; } } pageContext.setAttribute("results", results); pageContext.setAttribute("total", total); %&gt; </code></pre> <p><strong>user_search_results_database.jspf:</strong></p> <pre><code>&lt;% if (searchTerms.isAdvancedSearch()) { results = UserLocalServiceUtil.search(company.getCompanyId(), searchTerms.getFirstName(), searchTerms.getMiddleName(), searchTerms.getLastName(), searchTerms.getScreenName(), searchTerms.getEmailAddress(), searchTerms.getStatus(), userParams, searchTerms.isAndOperator(), searchContainer.getStart(), searchContainer.getEnd(), searchContainer.getOrderByComparator()); total = UserLocalServiceUtil.searchCount(company.getCompanyId(), searchTerms.getFirstName(), searchTerms.getMiddleName(), searchTerms.getLastName(), searchTerms.getScreenName(), searchTerms.getEmailAddress(), searchTerms.getStatus(), userParams, searchTerms.isAndOperator()); } else { results = UserLocalServiceUtil.search(company.getCompanyId(), searchTerms.getKeywords(), searchTerms.getStatus(), userParams, searchContainer.getStart(), searchContainer.getEnd(), searchContainer.getOrderByComparator()); total = UserLocalServiceUtil.searchCount(company.getCompanyId(), searchTerms.getKeywords(), searchTerms.getStatus(), userParams); } pageContext.setAttribute("results", results); pageContext.setAttribute("total", total); %&gt; </code></pre> <p><strong>user_display.jsp:</strong></p> <pre><code>&lt;%@ include file="/init.jsp" %&gt; &lt;% String backURL = ParamUtil.getString(request, "redirect"); portletDisplay.setURLBack(backURL); long userId = ParamUtil.getLong(request, "userId"); %&gt; &lt;liferay-ui:user-display displayStyle="&lt;%= 2 %&gt;" userId="&lt;%= userId %&gt;" /&gt; </code></pre> <p><strong>search_columns.jspf:</strong></p> <pre><code>&lt;liferay-ui:search-container-column-text href="&lt;%= rowURL %&gt;" name="first-name" orderable="&lt;%= true %&gt;" property="firstName" /&gt; &lt;liferay-ui:search-container-column-text href="&lt;%= rowURL %&gt;" name="last-name" orderable="&lt;%= true %&gt;" property="lastName" /&gt; &lt;liferay-ui:search-container-column-text href="&lt;%= rowURL %&gt;" name="screen-name" orderable="&lt;%= true %&gt;" property="screenName" /&gt; &lt;liferay-ui:search-container-column-text href="&lt;%= rowURL %&gt;" name="organizations" &gt; &lt;liferay-ui:write bean="&lt;%= curUser %&gt;" property="organizations" /&gt; &lt;/liferay-ui:search-container-column-text&gt; </code></pre> <p><strong>UserSearch.java:</strong></p> <pre><code>package kz.b2e.kudos.portal.searchuser.search; import com.liferay.portal.kernel.dao.search.SearchContainer; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.JavaConstants; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.model.User; import com.liferay.portal.util.PortletKeys; import com.liferay.portlet.PortalPreferences; import com.liferay.portlet.PortletPreferencesFactoryUtil; import com.liferay.portlet.usersadmin.util.UsersAdminUtil; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.portlet.PortletConfig; import javax.portlet.PortletRequest; import javax.portlet.PortletURL; public class UserSearch extends SearchContainer&lt;User&gt; { static List&lt;String&gt; headerNames = new ArrayList&lt;String&gt;(); static Map&lt;String, String&gt; orderableHeaders = new HashMap&lt;String, String&gt;(); static { headerNames.add("first-name"); headerNames.add("last-name"); headerNames.add("screen-name"); //headerNames.add("email-address"); headerNames.add("job-title"); headerNames.add("organizations"); orderableHeaders.put("first-name", "first-name"); orderableHeaders.put("last-name", "last-name"); orderableHeaders.put("screen-name", "screen-name"); //orderableHeaders.put("email-address", "email-address"); orderableHeaders.put("job-title", "job-title"); } public static final String EMPTY_RESULTS_MESSAGE = "no-users-were-found"; public UserSearch(PortletRequest portletRequest, PortletURL iteratorURL) { this(portletRequest, DEFAULT_CUR_PARAM, iteratorURL); } public UserSearch( PortletRequest portletRequest, String curParam, PortletURL iteratorURL) { super( portletRequest, new UserDisplayTerms(portletRequest), new UserSearchTerms(portletRequest), curParam, DEFAULT_DELTA, iteratorURL, headerNames, EMPTY_RESULTS_MESSAGE); PortletConfig portletConfig = (PortletConfig)portletRequest.getAttribute( JavaConstants.JAVAX_PORTLET_CONFIG); UserDisplayTerms displayTerms = (UserDisplayTerms)getDisplayTerms(); UserSearchTerms searchTerms = (UserSearchTerms)getSearchTerms(); String portletName = portletConfig.getPortletName(); if (!portletName.equals(PortletKeys.USERS_ADMIN)) { displayTerms.setStatus(WorkflowConstants.STATUS_APPROVED); searchTerms.setStatus(WorkflowConstants.STATUS_APPROVED); } iteratorURL.setParameter( UserDisplayTerms.STATUS, String.valueOf(displayTerms.getStatus())); iteratorURL.setParameter( UserDisplayTerms.EMAIL_ADDRESS, displayTerms.getEmailAddress()); iteratorURL.setParameter( UserDisplayTerms.FIRST_NAME, displayTerms.getFirstName()); iteratorURL.setParameter( UserDisplayTerms.LAST_NAME, displayTerms.getLastName()); iteratorURL.setParameter( UserDisplayTerms.MIDDLE_NAME, displayTerms.getMiddleName()); iteratorURL.setParameter( UserDisplayTerms.ORGANIZATION_ID, String.valueOf(displayTerms.getOrganizationId())); iteratorURL.setParameter( UserDisplayTerms.ROLE_ID, String.valueOf(displayTerms.getRoleId())); iteratorURL.setParameter( UserDisplayTerms.SCREEN_NAME, displayTerms.getScreenName()); iteratorURL.setParameter( UserDisplayTerms.USER_GROUP_ID, String.valueOf(displayTerms.getUserGroupId())); try { PortalPreferences preferences = PortletPreferencesFactoryUtil.getPortalPreferences( portletRequest); String orderByCol = ParamUtil.getString( portletRequest, "orderByCol"); String orderByType = ParamUtil.getString( portletRequest, "orderByType"); if (Validator.isNotNull(orderByCol) &amp;&amp; Validator.isNotNull(orderByType)) { preferences.setValue( PortletKeys.USERS_ADMIN, "users-order-by-col", orderByCol); preferences.setValue( PortletKeys.USERS_ADMIN, "users-order-by-type", orderByType); } else { orderByCol = preferences.getValue( PortletKeys.USERS_ADMIN, "users-order-by-col", "last-name"); orderByType = preferences.getValue( PortletKeys.USERS_ADMIN, "users-order-by-type", "asc"); } OrderByComparator orderByComparator = UsersAdminUtil.getUserOrderByComparator( orderByCol, orderByType); setOrderableHeaders(orderableHeaders); setOrderByCol(orderByCol); setOrderByType(orderByType); setOrderByComparator(orderByComparator); } catch (Exception e) { _log.error(e); } } private static Log _log = LogFactoryUtil.getLog(UserSearch.class); } </code></pre> <p><strong>UserSearchTerms.java:</strong></p> <pre><code>package kz.b2e.kudos.portal.searchuser.search; import com.liferay.portal.kernel.dao.search.SearchContainer; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.JavaConstants; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.model.User; import com.liferay.portal.util.PortletKeys; import com.liferay.portlet.PortalPreferences; import com.liferay.portlet.PortletPreferencesFactoryUtil; import com.liferay.portlet.usersadmin.util.UsersAdminUtil; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.portlet.PortletConfig; import javax.portlet.PortletRequest; import javax.portlet.PortletURL; public class UserSearch extends SearchContainer&lt;User&gt; { static List&lt;String&gt; headerNames = new ArrayList&lt;String&gt;(); static Map&lt;String, String&gt; orderableHeaders = new HashMap&lt;String, String&gt;(); static { headerNames.add("first-name"); headerNames.add("last-name"); headerNames.add("screen-name"); //headerNames.add("email-address"); headerNames.add("job-title"); headerNames.add("organizations"); orderableHeaders.put("first-name", "first-name"); orderableHeaders.put("last-name", "last-name"); orderableHeaders.put("screen-name", "screen-name"); //orderableHeaders.put("email-address", "email-address"); orderableHeaders.put("job-title", "job-title"); } public static final String EMPTY_RESULTS_MESSAGE = "no-users-were-found"; public UserSearch(PortletRequest portletRequest, PortletURL iteratorURL) { this(portletRequest, DEFAULT_CUR_PARAM, iteratorURL); } public UserSearch( PortletRequest portletRequest, String curParam, PortletURL iteratorURL) { super( portletRequest, new UserDisplayTerms(portletRequest), new UserSearchTerms(portletRequest), curParam, DEFAULT_DELTA, iteratorURL, headerNames, EMPTY_RESULTS_MESSAGE); PortletConfig portletConfig = (PortletConfig)portletRequest.getAttribute( JavaConstants.JAVAX_PORTLET_CONFIG); UserDisplayTerms displayTerms = (UserDisplayTerms)getDisplayTerms(); UserSearchTerms searchTerms = (UserSearchTerms)getSearchTerms(); String portletName = portletConfig.getPortletName(); if (!portletName.equals(PortletKeys.USERS_ADMIN)) { displayTerms.setStatus(WorkflowConstants.STATUS_APPROVED); searchTerms.setStatus(WorkflowConstants.STATUS_APPROVED); } iteratorURL.setParameter( UserDisplayTerms.STATUS, String.valueOf(displayTerms.getStatus())); iteratorURL.setParameter( UserDisplayTerms.EMAIL_ADDRESS, displayTerms.getEmailAddress()); iteratorURL.setParameter( UserDisplayTerms.FIRST_NAME, displayTerms.getFirstName()); iteratorURL.setParameter( UserDisplayTerms.LAST_NAME, displayTerms.getLastName()); iteratorURL.setParameter( UserDisplayTerms.MIDDLE_NAME, displayTerms.getMiddleName()); iteratorURL.setParameter( UserDisplayTerms.ORGANIZATION_ID, String.valueOf(displayTerms.getOrganizationId())); iteratorURL.setParameter( UserDisplayTerms.ROLE_ID, String.valueOf(displayTerms.getRoleId())); iteratorURL.setParameter( UserDisplayTerms.SCREEN_NAME, displayTerms.getScreenName()); iteratorURL.setParameter( UserDisplayTerms.USER_GROUP_ID, String.valueOf(displayTerms.getUserGroupId())); try { PortalPreferences preferences = PortletPreferencesFactoryUtil.getPortalPreferences( portletRequest); String orderByCol = ParamUtil.getString( portletRequest, "orderByCol"); String orderByType = ParamUtil.getString( portletRequest, "orderByType"); if (Validator.isNotNull(orderByCol) &amp;&amp; Validator.isNotNull(orderByType)) { preferences.setValue( PortletKeys.USERS_ADMIN, "users-order-by-col", orderByCol); preferences.setValue( PortletKeys.USERS_ADMIN, "users-order-by-type", orderByType); } else { orderByCol = preferences.getValue( PortletKeys.USERS_ADMIN, "users-order-by-col", "last-name"); orderByType = preferences.getValue( PortletKeys.USERS_ADMIN, "users-order-by-type", "asc"); } OrderByComparator orderByComparator = UsersAdminUtil.getUserOrderByComparator( orderByCol, orderByType); setOrderableHeaders(orderableHeaders); setOrderByCol(orderByCol); setOrderByType(orderByType); setOrderByComparator(orderByComparator); } catch (Exception e) { _log.error(e); } } private static Log _log = LogFactoryUtil.getLog(UserSearch.class); } </code></pre> <p><strong>UserDisplayTerms.java</strong></p> <pre><code>package kz.b2e.kudos.portal.searchuser.search; import com.liferay.portal.kernel.dao.search.DisplayTerms; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.workflow.WorkflowConstants; import javax.portlet.PortletRequest; public class UserDisplayTerms extends DisplayTerms { public static final String EMAIL_ADDRESS = "emailAddress"; public static final String FIRST_NAME = "firstName"; public static final String LAST_NAME = "lastName"; public static final String MIDDLE_NAME = "middleName"; public static final String ORGANIZATION_ID = "organizationId"; public static final String ROLE_ID = "roleId"; public static final String SCREEN_NAME = "screenName"; public static final String STATUS = "status"; public static final String USER_GROUP_ID = "userGroupId"; public UserDisplayTerms(PortletRequest portletRequest) { super(portletRequest); String statusString = ParamUtil.getString(portletRequest, STATUS); if (Validator.isNotNull(statusString)) { status = GetterUtil.getInteger(statusString); } emailAddress = ParamUtil.getString(portletRequest, EMAIL_ADDRESS); firstName = ParamUtil.getString(portletRequest, FIRST_NAME); lastName = ParamUtil.getString(portletRequest, LAST_NAME); middleName = ParamUtil.getString(portletRequest, MIDDLE_NAME); organizationId = ParamUtil.getLong(portletRequest, ORGANIZATION_ID); roleId = ParamUtil.getLong(portletRequest, ROLE_ID); screenName = ParamUtil.getString(portletRequest, SCREEN_NAME); userGroupId = ParamUtil.getLong(portletRequest, USER_GROUP_ID); } public String getEmailAddress() { return emailAddress; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public String getMiddleName() { return middleName; } public long getOrganizationId() { return organizationId; } public long getRoleId() { return roleId; } public String getScreenName() { return screenName; } public int getStatus() { return status; } public long getUserGroupId() { return userGroupId; } public boolean isActive() { if (status == WorkflowConstants.STATUS_APPROVED) { return true; } else { return false; } } public void setStatus(int status) { this.status = status; } protected String emailAddress; protected String firstName; protected String lastName; protected String middleName; protected long organizationId; protected long roleId; protected String screenName; protected int status; protected long userGroupId; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload