[richfaces-svn-commits] JBoss Rich Faces SVN: r2933 - in trunk/test-applications/facelets/src/main: webapp/Calendar and 1 other directory.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Thu Sep 13 13:09:03 EDT 2007


Author: ayanul
Date: 2007-09-13 13:09:02 -0400 (Thu, 13 Sep 2007)
New Revision: 2933

Modified:
   trunk/test-applications/facelets/src/main/java/calendar/CalendarBean.java
   trunk/test-applications/facelets/src/main/java/calendar/CalendarDataModelImpl.java
   trunk/test-applications/facelets/src/main/java/calendar/CalendarDataModelItemImpl.java
   trunk/test-applications/facelets/src/main/java/calendar/CalendarValidator.java
   trunk/test-applications/facelets/src/main/webapp/Calendar/Calendar.xhtml
Log:
update

Modified: trunk/test-applications/facelets/src/main/java/calendar/CalendarBean.java
===================================================================
--- trunk/test-applications/facelets/src/main/java/calendar/CalendarBean.java	2007-09-13 17:03:40 UTC (rev 2932)
+++ trunk/test-applications/facelets/src/main/java/calendar/CalendarBean.java	2007-09-13 17:09:02 UTC (rev 2933)
@@ -24,35 +24,51 @@
 import java.text.DateFormat;
 import java.util.Date;
 import java.util.Locale;
-
+import java.util.TimeZone;
 import javax.faces.event.ValueChangeEvent;
 
-/**
- * 20/07/2007
- * 
- * @author Alexej Kushunin
- * @mailto: akushunin at exadel.com
- * 
- */
+import org.richfaces.event.CurrentDateChangeEvent;
+
 public class CalendarBean {
 
-	private static final String[] WEEK_DAY_LABELS = new String[] { "Sun *",
+	private static final String [] WEEK_DAY_LABELS = new String [] { "Sun *",
 			"Mon +", "Tue +", "Wed +", "Thu +", "Fri +", "Sat *" };
+	private static final String [] WEEK_DAY = new String [] {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
+ 	
 	private Locale locale;
-
 	private boolean popup;
 	private boolean readonly;
 	private boolean showInput;
 	private boolean enableManualInput;	
-	private String pattern;
+	private boolean ajaxSingle;
+	private boolean disabled;
+	private boolean bypassUpdates;
+	private boolean rendered;
+	private boolean useCustomDayLabels;
+	private boolean useCustomDay;
+	private boolean required;
 	private Date currentDate;
 	private Date selectedDate;
+	private String height;
+	private String width;
+	private String pattern;
 	private String jointPoint;
 	private String direction;
 	private String boundary;
-
-	private boolean useCustomDayLabels;
-
+	private String icon;
+	private String toolTipMode;
+	private String scrollMode;
+	private int zindex;
+	private int counter;
+	
+	public void changeIcons() {
+		if (icon != null) {
+			icon = null;
+		} else {
+			icon = "/pics/ajax_process.gif";
+		}
+	}
+	
 	public Locale getLocale() {
 		return locale;
 	}
@@ -86,7 +102,8 @@
 	}
 
 	public CalendarBean() {
-
+		height = "400px";
+		width = "400px";
 		locale = Locale.US;
 		popup = true;
 		pattern = "MMM d, yyyy";
@@ -96,6 +113,14 @@
 		enableManualInput=false;
 		showInput=true;
 		boundary = "inactive";
+		icon = null;
+		disabled = false;
+		bypassUpdates = false;
+		rendered = true;
+		zindex = 2;
+		toolTipMode = "none";
+		scrollMode = "client";
+		required = false;
 	}
 	
 	
@@ -124,7 +149,6 @@
 	}
 
 	public void selectLocale(ValueChangeEvent event) {
-
 		String tLocale = (String) event.getNewValue();
 		if (tLocale != null) {
 			String lang = tLocale.substring(0, 2);
@@ -148,6 +172,14 @@
 			return null;
 		}
 	}
+	
+	public Object getWeekDayLabels() {
+		if (isUseCustomDay()) {
+			return WEEK_DAY;
+		} else {
+			return null;
+		}
+	}
 
 	public String getCurrentDateAsText() {
 		Date currentDate = getCurrentDate();
@@ -206,5 +238,117 @@
 	public void setBoundary(String boundary) {
 		this.boundary = boundary;
 	}
+	public void dcl(CurrentDateChangeEvent event){
+		System.out.println(event.getCurrentDateString());
+		System.out.println("ajvhckndskncs");
+	}
+	public void ddd(ValueChangeEvent event){
+		System.out.println(event.getOldValue());
+		System.out.println(event.getNewValue());
+		
+	}
 
+	public int getCounter() {
+		return counter++;
+	}
+
+	public boolean isAjaxSingle() {
+		return ajaxSingle;
+	}
+
+	public void setAjaxSingle(boolean ajaxSingle) {
+		this.ajaxSingle = ajaxSingle;
+	}
+
+	public String getIcon() {
+		return icon;
+	}
+
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public boolean isDisabled() {
+		return disabled;
+	}
+
+	public void setDisabled(boolean disabled) {
+		this.disabled = disabled;
+	}
+
+	public boolean isBypassUpdates() {
+		return bypassUpdates;
+	}
+
+	public void setBypassUpdates(boolean bypassUpdates) {
+		this.bypassUpdates = bypassUpdates;
+	}
+
+	public String getHeight() {
+		return height;
+	}
+
+	public void setHeight(String height) {
+		this.height = height;
+	}
+
+	public boolean isRendered() {
+		return rendered;
+	}
+
+	public void setRendered(boolean rendered) {
+		this.rendered = rendered;
+	}
+
+	public String getToolTipMode() {
+		return toolTipMode;
+	}
+
+	public void setToolTipMode(String toolTipMode) {
+		this.toolTipMode = toolTipMode;
+	}
+
+	public String getScrollMode() {
+		return scrollMode;
+	}
+
+	public void setScrollMode(String scrollMode) {
+		this.scrollMode = scrollMode;
+	}
+
+	public int getZindex() {
+		return zindex;
+	}
+
+	public void setZindex(int zindex) {
+		this.zindex = zindex;
+	}
+
+	public String getWidth() {
+		return width;
+	}
+
+	public void setWidth(String width) {
+		this.width = width;
+	}
+
+
+
+	public boolean isUseCustomDay() {
+		return useCustomDay;
+	}
+
+
+
+	public void setUseCustomDay(boolean useCustomDay) {
+		this.useCustomDay = useCustomDay;
+	}
+
+	public boolean isRequired() {
+		return required;
+	}
+
+	public void setRequired(boolean required) {
+		this.required = required;
+	}
 }

Modified: trunk/test-applications/facelets/src/main/java/calendar/CalendarDataModelImpl.java
===================================================================
--- trunk/test-applications/facelets/src/main/java/calendar/CalendarDataModelImpl.java	2007-09-13 17:03:40 UTC (rev 2932)
+++ trunk/test-applications/facelets/src/main/java/calendar/CalendarDataModelImpl.java	2007-09-13 17:09:02 UTC (rev 2933)
@@ -55,7 +55,6 @@
 
 	protected CalendarDataModelItem createDataModelItem(Date date) {
 		CalendarDataModelItemImpl item = new CalendarDataModelItemImpl();
-		item.setDate(date);
 		Map data = new HashMap();
 		DateFormat enFormatter = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.ENGLISH);
 		DateFormat frFormatter = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.FRENCH);

Modified: trunk/test-applications/facelets/src/main/java/calendar/CalendarDataModelItemImpl.java
===================================================================
--- trunk/test-applications/facelets/src/main/java/calendar/CalendarDataModelItemImpl.java	2007-09-13 17:03:40 UTC (rev 2932)
+++ trunk/test-applications/facelets/src/main/java/calendar/CalendarDataModelItemImpl.java	2007-09-13 17:09:02 UTC (rev 2933)
@@ -21,8 +21,6 @@
 
 package calendar;
 
-import java.util.Date;
-
 import org.richfaces.model.CalendarDataModelItem;
 
 /**
@@ -33,7 +31,6 @@
 public class CalendarDataModelItemImpl implements CalendarDataModelItem {
 
 	private Object data;
-	private Date date;
 	private String styleClass;
 	private Object toolTip;
 	private boolean enabled = true;
@@ -46,13 +43,6 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.richfaces.component.CalendarDataModelItem#getDate()
-	 */
-	public Date getDate() {
-		return date;
-	}
-
-	/* (non-Javadoc)
 	 * @see org.richfaces.component.CalendarDataModelItem#getStyleClass()
 	 */
 	public String getStyleClass() {
@@ -88,13 +78,6 @@
 	}
 
 	/**
-	 * @param date the date to set
-	 */
-	public void setDate(Date date) {
-		this.date = date;
-	}
-
-	/**
 	 * @param styleClass the styleClass to set
 	 */
 	public void setStyleClass(String styleClass) {

Modified: trunk/test-applications/facelets/src/main/java/calendar/CalendarValidator.java
===================================================================
--- trunk/test-applications/facelets/src/main/java/calendar/CalendarValidator.java	2007-09-13 17:03:40 UTC (rev 2932)
+++ trunk/test-applications/facelets/src/main/java/calendar/CalendarValidator.java	2007-09-13 17:09:02 UTC (rev 2933)
@@ -1,6 +1,3 @@
-/**
- * 
- */
 package calendar;
 
 import java.util.Calendar;

Modified: trunk/test-applications/facelets/src/main/webapp/Calendar/Calendar.xhtml
===================================================================
--- trunk/test-applications/facelets/src/main/webapp/Calendar/Calendar.xhtml	2007-09-13 17:03:40 UTC (rev 2932)
+++ trunk/test-applications/facelets/src/main/webapp/Calendar/Calendar.xhtml	2007-09-13 17:09:02 UTC (rev 2933)
@@ -3,7 +3,7 @@
 	xmlns:rich="http://richfaces.org/rich"
 	xmlns:h="http://java.sun.com/jsf/html">
 
-		<style type="text/css">
+	<style type="text/css">
 .smallText {
 	font-size: xx-small;
 }
@@ -16,116 +16,192 @@
 	background-color: #0087FF;
 }
 </style>
-		<f:verbatim>
-			<br />
-		</f:verbatim>
+	
 
-		<rich:calendar id="calendar" dataModel="#{calendarDataModel}"
-			locale="#{calendarBean.locale}" popup="#{calendarBean.popup}"
-			datePattern="#{calendarBean.pattern}"
-			weekDayLabelsShort="#{calendarBean.weekDayLabelsShort}"
-			value="#{calendarBean.selectedDate}"
-			currentDate="#{calendarBean.currentDate}"
-			jointPoint="#{calendarBean.jointPoint}"
-			direction="#{calendarBean.direction}" buttonLabel="PopUp"
-			enableManualInput="#{calendarBean.enableManualInput}"
-			showInput="#{calendarBean.showInput}"
-			boundaryDatesMode="#{calendarBean.boundary}">
-			<f:facet name="optionalHeader">
-				<h:outputText value="optionalHeader Facet" />
-			</f:facet>
-			<f:facet name="optionalFooter">
-				<h:outputText value="optionalFooter Facet" />
-			</f:facet>
-			<f:validator validatorId="org.richfaces.CalendarValidator" />
+	<f:verbatim>
+		<br />
+	</f:verbatim>
 
-			<h:panelGrid columns="2">
-				<f:verbatim>
-					<span style="padding: 2px;">{day}</span>
-				</f:verbatim>
+	<rich:calendar id="calendarID" dataModel="#{calendarDataModel}"
+		locale="#{calendarBean.locale}" popup="#{calendarBean.popup}"
+		datePattern="#{calendarBean.pattern}"
+		weekDayLabelsShort="#{calendarBean.weekDayLabelsShort}"
+		weekDayLabels="#{calendarBean.weekDayLabels}" 
+		value="#{calendarBean.selectedDate}"
+		currentDate="#{calendarBean.currentDate}"
+		jointPoint="#{calendarBean.jointPoint}"
+		direction="#{calendarBean.direction}" buttonLabel="Select Date"
+		enableManualInput="#{calendarBean.enableManualInput}"
+		showInput="#{calendarBean.showInput}"
+		boundaryDatesMode="#{calendarBean.boundary}"
+		currentDateChangeListener="#{calendarBean.dcl}"
+		valueChangeListener="#{calendarBean.ddd}" reRender="counter"
+		inputClass="ic" buttonClass="bc"
+		ajaxSingle="#{calendarBean.ajaxSingle}"
+		buttonIcon="#{calendarBean.icon}"
+		buttonIconDisabled="/pics/ajax_stoped.gif"
+		disabled="#{calendarBean.disabled}"
+		bypassUpdates="#{calendarBean.bypassUpdates}"
+		height="#{calendarBean.height}"	
+		width="#{calendarBean.width}"
+		zindex="#{calendarBean.zindex}"
+		toolTipMode="#{calendarBean.toolTipMode}"
+		scrollMode="#{calendarBean.scrollMode}"
+		rendered="#{calendarBean.rendered}" 
+		focus="popupModeID"
+		required="#{calendarBean.required}"
+		requiredMessage="Required Message">
+		<f:facet name="optionalHeader">
+			<h:outputText value="optionalHeader Facet" />
+		</f:facet>
+		<f:facet name="optionalFooter">
+			<h:outputText value="optionalFooter Facet" />
+		</f:facet>
+		<f:validator validatorId="org.richfaces.CalendarValidator" />
 
+		<h:panelGrid columns="2">
+			<f:verbatim>
+				<span style="padding: 2px;">{day}</span>
+			</f:verbatim>
+			<h:panelGrid>
+				<h:outputText styleClass="smallText" value="{data.enLabel}" />
+				<h:outputText styleClass="smallText" value="{data.frLabel}" />
+				<h:outputText styleClass="smallText" value="{data.deLabel}" />
 			</h:panelGrid>
-		</rich:calendar>
+		</h:panelGrid>
+	</rich:calendar>
 
-		<h:panelGrid columns="2">
-			<h:outputText value="Select Locale:" />
-			<h:selectOneRadio onchange="submit()" value="en/US"
-				valueChangeListener="#{calendarBean.selectLocale}">
-				<f:selectItem itemLabel="US" itemValue="en/US" />
-				<f:selectItem itemLabel="DE" itemValue="de/DE" />
-				<f:selectItem itemLabel="FR" itemValue="fr/FR" />
-				<f:selectItem itemLabel="RU" itemValue="ru/RU" />
-			</h:selectOneRadio>
-			<h:outputText value="Popup Mode:" />
-			<h:selectBooleanCheckbox value="#{calendarBean.popup}"
-				onclick="submit()" />
-			<h:outputText value="Custom day labels:" />
-			<h:selectBooleanCheckbox value="#{calendarBean.useCustomDayLabels}"
-				onclick="submit()" />
-			<h:outputText value="Select Date Pattern:" />
-			<h:selectOneMenu value="MMM d, yyyy" onchange="submit()"
-				valueChangeListener="#{calendarBean.selectPattern}">
-				<f:selectItem itemLabel="d/M/yy" itemValue="d/M/yy" />
-				<f:selectItem itemLabel="dd/M/yy" itemValue="dd/M/yy" />
-				<f:selectItem itemLabel="d/MMM/y" itemValue="d/MMM/y" />
-				<f:selectItem itemLabel="MMM d, yyyy" itemValue="MMM d, yyyy" />
-			</h:selectOneMenu>
-			<h:inputText id="selectdate" />
-			<h:commandButton type="button" value="Select Date"
-				onclick="$(this.form.id+':calendar').component.selectDate(this.form[this.form.id+':selectdate'].value);" />
-			<h:outputText value="Select Popup Joint Point:" />
-			<h:selectOneRadio onchange="submit()"
-				value="#{calendarBean.jointPoint}"
-				valueChangeListener="#{calendarBean.selectJointPoint}">
-				<f:selectItem itemLabel="bottom-right" itemValue="bottom-right" />
-				<f:selectItem itemLabel="bottom-left" itemValue="bottom-left" />
-				<f:selectItem itemLabel="top-right" itemValue="top-right" />
-				<f:selectItem itemLabel="top-left" itemValue="top-left" />
-			</h:selectOneRadio>
-			<h:outputText value="Select Popup Direction:" />
-			<h:selectOneRadio onchange="submit()"
-				value="#{calendarBean.direction}"
-				valueChangeListener="#{calendarBean.selectDirection}">
-				<f:selectItem itemLabel="bottom-right" itemValue="bottom-right" />
-				<f:selectItem itemLabel="bottom-left" itemValue="bottom-left" />
-				<f:selectItem itemLabel="top-right" itemValue="top-right" />
-				<f:selectItem itemLabel="top-left" itemValue="top-left" />
-				<f:selectItem itemLabel="auto" itemValue="auto" />
-			</h:selectOneRadio>
-			<h:outputText value="BoundaryDatesMode:" />
-			<h:selectOneRadio onclick="submit()" value="#{calendarBean.boundary}">
-				<f:selectItem itemLabel="inactive" itemValue="inactive" />
-				<f:selectItem itemLabel="select" itemValue="select" />
-				<f:selectItem itemLabel="scroll" itemValue="scroll" />
-			</h:selectOneRadio>
-			<h:outputText value="EnableManualInput:"></h:outputText>
-			<h:selectBooleanCheckbox value="#{calendarBean.enableManualInput}"
-				onclick="submit()">
-			</h:selectBooleanCheckbox>
-			<h:outputText value="ShowInput:"></h:outputText>
-			<h:selectBooleanCheckbox value="#{calendarBean.showInput}"
-				onclick="submit()">
-			</h:selectBooleanCheckbox>
+	<h:panelGrid columns="2">
+		<h:outputText value="Select Locale:" />
+		<h:selectOneRadio onchange="submit()" value="en/US"
+			valueChangeListener="#{calendarBean.selectLocale}">
+			<f:selectItem itemLabel="US" itemValue="en/US" />
+			<f:selectItem itemLabel="DE" itemValue="de/DE" />
+			<f:selectItem itemLabel="FR" itemValue="fr/FR" />
+			<f:selectItem itemLabel="RU" itemValue="ru/RU" />
+		</h:selectOneRadio>
+		
+		<h:outputText value="Popup Mode:" />
+		<h:selectBooleanCheckbox id="popupModeID" value="#{calendarBean.popup}"
+			onclick="submit()" />
+		
+		<h:outputText value="Custom day labels short:" />
+		<h:selectBooleanCheckbox value="#{calendarBean.useCustomDayLabels}"
+			onclick="submit()" />
+		
+		<h:outputText value="Custom day labels" />
+		<h:selectBooleanCheckbox value="#{calendarBean.useCustomDay}"
+			onclick="submit()" />
+		
+		
+		<h:outputText value="Select Date Pattern:" />
+		<h:selectOneMenu value="MMM d, yyyy" onchange="submit()"
+			valueChangeListener="#{calendarBean.selectPattern}">
+			<f:selectItem itemLabel="d/M/yy" itemValue="d/M/yy" />
+			<f:selectItem itemLabel="dd/M/yy" itemValue="dd/M/yy" />
+			<f:selectItem itemLabel="d/MMM/y" itemValue="d/MMM/y" />
+			<f:selectItem itemLabel="MMM d, yyyy" itemValue="MMM d, yyyy" />
+		</h:selectOneMenu>
+		
+		<h:inputText id="selectdate" />
+		<h:commandButton type="button" value="Select Date"
+			onclick="$(this.form.id+':calendarID').component.selectDate(this.form[this.form.id+':selectdate'].value);" />
 
+		<h:outputText value="z-index:" />
+		<h:inputText value="#{calendarBean.zindex}">
+			<a4j:support event="onchange" reRender="calendarID"></a4j:support>
+		</h:inputText>
 
+		<h:outputText value="Height:" />
+		<h:inputText value="#{calendarBean.height}">
+			<a4j:support event="onchange" reRender="calendarID"></a4j:support>
+		</h:inputText>
+				
+		<h:outputText value="Width:" />
+		<h:inputText value="#{calendarBean.width}">
+			<a4j:support event="onchange" reRender="calendarID"></a4j:support>
+		</h:inputText>
+		
+		<h:outputText value="reRender (counter):" />				
+		<h:outputText id="counter" value="#{calendarBean.counter}" />
+		
+		<h:outputText value="Required" />
+		<h:selectBooleanCheckbox value="#{calendarBean.required}" onclick="submit()"/>
+				
+		<h:outputText value="Select Popup Joint Point:" />
+		<h:selectOneRadio onchange="submit()"
+			value="#{calendarBean.jointPoint}"
+			valueChangeListener="#{calendarBean.selectJointPoint}">
+			<f:selectItem itemLabel="bottom-right" itemValue="bottom-right" />
+			<f:selectItem itemLabel="bottom-left" itemValue="bottom-left" />
+			<f:selectItem itemLabel="top-right" itemValue="top-right" />
+			<f:selectItem itemLabel="top-left" itemValue="top-left" />
+		</h:selectOneRadio>
+		
+		<h:outputText value="Select Popup Direction:" />
+		<h:selectOneRadio onchange="submit()"
+			value="#{calendarBean.direction}"
+			valueChangeListener="#{calendarBean.selectDirection}">
+			<f:selectItem itemLabel="bottom-right" itemValue="bottom-right" />
+			<f:selectItem itemLabel="bottom-left" itemValue="bottom-left" />
+			<f:selectItem itemLabel="top-right" itemValue="top-right" />
+			<f:selectItem itemLabel="top-left" itemValue="top-left" />
+			<f:selectItem itemLabel="auto" itemValue="auto" />
+		</h:selectOneRadio>
+		
+		<h:outputText value="ToolTip Mode:" />
+		<h:selectOneRadio value="#{calendarBean.toolTipMode}" onchange="submit();">
+			<f:selectItem itemLabel="none" itemValue="none"/> 
+			<f:selectItem itemLabel="single" itemValue="single"/>
+			<f:selectItem itemLabel="batch" itemValue="batch"/>
+		</h:selectOneRadio>
 
-		</h:panelGrid>
-
+		<h:outputText value="Scroll Mode:" />
+		<h:selectOneRadio value="#{calendarBean.scrollMode}" onchange="submit();">
+			<f:selectItem itemLabel="client" itemValue="client"/>
+			<f:selectItem itemLabel="ajax" itemValue="ajax"/>
+		</h:selectOneRadio>
+		
+		<h:outputText value="BoundaryDatesMode:" />
+		<h:selectOneRadio onclick="submit()" value="#{calendarBean.boundary}">
+			<f:selectItem itemLabel="inactive" itemValue="inactive" />
+			<f:selectItem itemLabel="select" itemValue="select" />
+			<f:selectItem itemLabel="scroll" itemValue="scroll" />
+		</h:selectOneRadio>
+		
+		<h:outputText value="EnableManualInput:"></h:outputText>
+		<h:selectBooleanCheckbox value="#{calendarBean.enableManualInput}"
+			onclick="submit()">
+		</h:selectBooleanCheckbox>
+		
+		<h:outputText value="ShowInput:"></h:outputText>
+		<h:selectBooleanCheckbox value="#{calendarBean.showInput}"
+			onclick="submit()">
+		</h:selectBooleanCheckbox>
+		
+		<h:outputText value="Disabled:" />
+		<h:selectBooleanCheckbox value="#{calendarBean.disabled}" onclick="submit()"/>
+		
+		<h:outputText value="Rendered:" />
+		<h:selectBooleanCheckbox value="#{calendarBean.rendered}" onclick="submit()"/>
+		
+		<f:verbatim></f:verbatim>
+		<h:commandButton action="#{calendarBean.changeIcons}" value="ChangeIcons" />
+		
 		<h:outputText value="Current date: " />
 		<h:outputText value="#{calendarBean.currentDateAsText}" />
-		<f:verbatim>
-			<br />
-		</f:verbatim>
+
 		<h:outputText value="Selected date: " />
 		<h:outputText value="#{calendarBean.selectedDate}" />
-		<f:verbatim>
-			<br />
-		</f:verbatim>
+				
+		<f:verbatim></f:verbatim>
+		<h:commandButton value="Submit" />
+	</h:panelGrid>
 
-		<h:commandButton value="Submit" />
-		<f:verbatim>
-			<br />
-		</f:verbatim>
-		<h:commandLink value="Back" action="main"></h:commandLink>
+	<f:verbatim>
+		<br />
+	</f:verbatim>
+
+	<h:commandLink value="Back" action="main"></h:commandLink>
 </h:form>
 




More information about the richfaces-svn-commits mailing list