NIHVIVO-1629 Upgrade jQuery to version 1.5. NIHVIVO-2153 Change datetime fieldnames to use hyphen rather than period, since the latter generates errors in jQuery 1.5 and is not a valid CSS selector.
This commit is contained in:
parent
8e554c3975
commit
dae5369232
8 changed files with 146 additions and 284 deletions
|
@ -27,7 +27,7 @@ import freemarker.template.Configuration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is intended to work in conjunction with a template to create the HTML for a
|
* This is intended to work in conjunction with a template to create the HTML for a
|
||||||
* datetime with precision and to convert he submitted parameters into
|
* datetime with precision and to convert the submitted parameters into
|
||||||
* varname -> Literal and varname -> URI maps.
|
* varname -> Literal and varname -> URI maps.
|
||||||
*
|
*
|
||||||
* The variables that get passed to the template are defined in:
|
* The variables that get passed to the template are defined in:
|
||||||
|
@ -257,7 +257,7 @@ public class DateTimeWithPrecision extends BaseEditElement {
|
||||||
Map<String,Literal> literalMap = new HashMap<String,Literal>();
|
Map<String,Literal> literalMap = new HashMap<String,Literal>();
|
||||||
|
|
||||||
Literal datetime =getDateTime( queryParameters);
|
Literal datetime =getDateTime( queryParameters);
|
||||||
literalMap.put(fieldName+".value", datetime);
|
literalMap.put(fieldName+"-value", datetime);
|
||||||
|
|
||||||
return literalMap;
|
return literalMap;
|
||||||
}
|
}
|
||||||
|
@ -273,25 +273,25 @@ public class DateTimeWithPrecision extends BaseEditElement {
|
||||||
if( BLANK_SENTINEL.equals( submittedPrec ) )
|
if( BLANK_SENTINEL.equals( submittedPrec ) )
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
Integer year = parseToInt(fieldName+".year", queryParameters);
|
Integer year = parseToInt(fieldName+"-year", queryParameters);
|
||||||
|
|
||||||
//this is the case where date has not been filled out at all.
|
//this is the case where date has not been filled out at all.
|
||||||
if( year == null )
|
if( year == null )
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
Integer month = parseToInt(fieldName+".month", queryParameters);
|
Integer month = parseToInt(fieldName+"-month", queryParameters);
|
||||||
if( month == null || month == 0 )
|
if( month == null || month == 0 )
|
||||||
month = 1;
|
month = 1;
|
||||||
Integer day = parseToInt(fieldName+".day", queryParameters);
|
Integer day = parseToInt(fieldName+"-day", queryParameters);
|
||||||
if( day == null || day == 0 )
|
if( day == null || day == 0 )
|
||||||
day = 1;
|
day = 1;
|
||||||
Integer hour = parseToInt(fieldName+".hour", queryParameters);
|
Integer hour = parseToInt(fieldName+"-hour", queryParameters);
|
||||||
if( hour == null )
|
if( hour == null )
|
||||||
hour = 0;
|
hour = 0;
|
||||||
Integer minute = parseToInt(fieldName+".minute", queryParameters);
|
Integer minute = parseToInt(fieldName+"-minute", queryParameters);
|
||||||
if( minute == null )
|
if( minute == null )
|
||||||
minute = 0;
|
minute = 0;
|
||||||
Integer second = parseToInt(fieldName+".second", queryParameters);
|
Integer second = parseToInt(fieldName+"-second", queryParameters);
|
||||||
if( second == null )
|
if( second == null )
|
||||||
second = 0;
|
second = 0;
|
||||||
int mills = 0;
|
int mills = 0;
|
||||||
|
@ -326,12 +326,12 @@ public class DateTimeWithPrecision extends BaseEditElement {
|
||||||
try {
|
try {
|
||||||
precisionUri = getSubmittedPrecision( queryParameters);
|
precisionUri = getSubmittedPrecision( queryParameters);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("getURIS() should only be called on input that passed getValidationErrors()");
|
log.error("getURIs() should only be called on input that passed getValidationErrors()");
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
Map<String,String> uriMap = new HashMap<String,String>();
|
Map<String,String> uriMap = new HashMap<String,String>();
|
||||||
if( precisionUri != null )
|
if( precisionUri != null )
|
||||||
uriMap.put(fieldName+".precision", precisionUri);
|
uriMap.put(fieldName+"-precision", precisionUri);
|
||||||
return uriMap;
|
return uriMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,12 +342,12 @@ public class DateTimeWithPrecision extends BaseEditElement {
|
||||||
*/
|
*/
|
||||||
protected String getSubmittedPrecision(Map<String, String[]> queryParameters) throws Exception {
|
protected String getSubmittedPrecision(Map<String, String[]> queryParameters) throws Exception {
|
||||||
|
|
||||||
Integer year = parseToInt(fieldName+".year",queryParameters);
|
Integer year = parseToInt(fieldName+"-year",queryParameters);
|
||||||
Integer month = parseToInt(fieldName+".month",queryParameters);
|
Integer month = parseToInt(fieldName+"-month",queryParameters);
|
||||||
Integer day = parseToInt(fieldName+".day",queryParameters);
|
Integer day = parseToInt(fieldName+"-day",queryParameters);
|
||||||
Integer hour = parseToInt(fieldName+".hour",queryParameters);
|
Integer hour = parseToInt(fieldName+"-hour",queryParameters);
|
||||||
Integer minute = parseToInt(fieldName+".minute",queryParameters);
|
Integer minute = parseToInt(fieldName+"-minute",queryParameters);
|
||||||
Integer second = parseToInt(fieldName+".second",queryParameters);
|
Integer second = parseToInt(fieldName+"-second",queryParameters);
|
||||||
Integer[] values = { year, month, day, hour, minute, second };
|
Integer[] values = { year, month, day, hour, minute, second };
|
||||||
|
|
||||||
/* find the most significant date field that is null. */
|
/* find the most significant date field that is null. */
|
||||||
|
@ -393,8 +393,8 @@ public class DateTimeWithPrecision extends BaseEditElement {
|
||||||
//check that any parameters we got are single values
|
//check that any parameters we got are single values
|
||||||
String[] names = {"year","month","day","hour","minute","second", "precision"};
|
String[] names = {"year","month","day","hour","minute","second", "precision"};
|
||||||
for( String name:names){
|
for( String name:names){
|
||||||
if ( !hasNoneOrSingle(fieldName+"."+name, queryParameters))
|
if ( !hasNoneOrSingle(fieldName+"-"+name, queryParameters))
|
||||||
errorMsgMap.put(fieldName+"."+name, "must have only one value for " + name);
|
errorMsgMap.put(fieldName+"-"+name, "must have only one value for " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
String precisionURI = null;
|
String precisionURI = null;
|
||||||
|
@ -430,72 +430,72 @@ public class DateTimeWithPrecision extends BaseEditElement {
|
||||||
|
|
||||||
//just check if the values for the precision parse to integers
|
//just check if the values for the precision parse to integers
|
||||||
if( precisionURI.equals(VitroVocabulary.Precision.YEAR.uri() ) ){
|
if( precisionURI.equals(VitroVocabulary.Precision.YEAR.uri() ) ){
|
||||||
if( ! canParseToNumber(fieldName+".year" ,qp))
|
if( ! canParseToNumber(fieldName+"-year" ,qp))
|
||||||
errors.put(fieldName+".year", NON_INTEGER_YEAR);
|
errors.put(fieldName+"-year", NON_INTEGER_YEAR);
|
||||||
}else if( precisionURI.equals( VitroVocabulary.Precision.MONTH.uri() )){
|
}else if( precisionURI.equals( VitroVocabulary.Precision.MONTH.uri() )){
|
||||||
if( ! canParseToNumber(fieldName+".year" ,qp))
|
if( ! canParseToNumber(fieldName+"-year" ,qp))
|
||||||
errors.put(fieldName+".year", NON_INTEGER_YEAR);
|
errors.put(fieldName+"-year", NON_INTEGER_YEAR);
|
||||||
if( ! canParseToNumber(fieldName+".month" ,qp))
|
if( ! canParseToNumber(fieldName+"-month" ,qp))
|
||||||
errors.put(fieldName+".month", NON_INTEGER_MONTH);
|
errors.put(fieldName+"-month", NON_INTEGER_MONTH);
|
||||||
}else if( precisionURI.equals( VitroVocabulary.Precision.DAY.uri() )){
|
}else if( precisionURI.equals( VitroVocabulary.Precision.DAY.uri() )){
|
||||||
if( ! canParseToNumber(fieldName+".year" ,qp))
|
if( ! canParseToNumber(fieldName+"-year" ,qp))
|
||||||
errors.put(fieldName+".year", NON_INTEGER_YEAR);
|
errors.put(fieldName+"-year", NON_INTEGER_YEAR);
|
||||||
if( ! canParseToNumber(fieldName+".month" ,qp))
|
if( ! canParseToNumber(fieldName+"-month" ,qp))
|
||||||
errors.put(fieldName+".month", NON_INTEGER_MONTH);
|
errors.put(fieldName+"-month", NON_INTEGER_MONTH);
|
||||||
if( ! canParseToNumber(fieldName+".day" ,qp))
|
if( ! canParseToNumber(fieldName+"-day" ,qp))
|
||||||
errors.put(fieldName+".day", NON_INTEGER_DAY);
|
errors.put(fieldName+"-day", NON_INTEGER_DAY);
|
||||||
}else if( precisionURI.equals( VitroVocabulary.Precision.HOUR.uri() )){
|
}else if( precisionURI.equals( VitroVocabulary.Precision.HOUR.uri() )){
|
||||||
if( ! canParseToNumber(fieldName+".year" ,qp))
|
if( ! canParseToNumber(fieldName+"-year" ,qp))
|
||||||
errors.put(fieldName+".year", NON_INTEGER_YEAR);
|
errors.put(fieldName+"-year", NON_INTEGER_YEAR);
|
||||||
if( ! canParseToNumber(fieldName+".month" ,qp))
|
if( ! canParseToNumber(fieldName+"-month" ,qp))
|
||||||
errors.put(fieldName+".month", NON_INTEGER_MONTH);
|
errors.put(fieldName+"-month", NON_INTEGER_MONTH);
|
||||||
if( ! canParseToNumber(fieldName+".day" ,qp))
|
if( ! canParseToNumber(fieldName+"-day" ,qp))
|
||||||
errors.put(fieldName+".day", NON_INTEGER_DAY);
|
errors.put(fieldName+"-day", NON_INTEGER_DAY);
|
||||||
if( ! canParseToNumber(fieldName+".hour" ,qp))
|
if( ! canParseToNumber(fieldName+"-hour" ,qp))
|
||||||
errors.put(fieldName+".hour", NON_INTEGER_HOUR);
|
errors.put(fieldName+"-hour", NON_INTEGER_HOUR);
|
||||||
}else if( precisionURI.equals( VitroVocabulary.Precision.MINUTE.uri() )){
|
}else if( precisionURI.equals( VitroVocabulary.Precision.MINUTE.uri() )){
|
||||||
if( ! canParseToNumber(fieldName+".year" ,qp))
|
if( ! canParseToNumber(fieldName+"-year" ,qp))
|
||||||
errors.put(fieldName+".year", NON_INTEGER_YEAR);
|
errors.put(fieldName+"-year", NON_INTEGER_YEAR);
|
||||||
if( ! canParseToNumber(fieldName+".month" ,qp))
|
if( ! canParseToNumber(fieldName+"-month" ,qp))
|
||||||
errors.put(fieldName+".month", NON_INTEGER_MONTH);
|
errors.put(fieldName+"-month", NON_INTEGER_MONTH);
|
||||||
if( ! canParseToNumber(fieldName+".day" ,qp))
|
if( ! canParseToNumber(fieldName+"-day" ,qp))
|
||||||
errors.put(fieldName+".day", NON_INTEGER_DAY);
|
errors.put(fieldName+"-day", NON_INTEGER_DAY);
|
||||||
if( ! canParseToNumber(fieldName+".hour" ,qp))
|
if( ! canParseToNumber(fieldName+"-hour" ,qp))
|
||||||
errors.put(fieldName+".hour", NON_INTEGER_HOUR);
|
errors.put(fieldName+"-hour", NON_INTEGER_HOUR);
|
||||||
if( ! canParseToNumber(fieldName+".minute" ,qp))
|
if( ! canParseToNumber(fieldName+"-minute" ,qp))
|
||||||
errors.put(fieldName+".minute", NON_INTEGER_HOUR);
|
errors.put(fieldName+"-minute", NON_INTEGER_HOUR);
|
||||||
}else if( precisionURI.equals( VitroVocabulary.Precision.SECOND.uri() )){
|
}else if( precisionURI.equals( VitroVocabulary.Precision.SECOND.uri() )){
|
||||||
if( ! canParseToNumber(fieldName+".year" ,qp))
|
if( ! canParseToNumber(fieldName+"-year" ,qp))
|
||||||
errors.put(fieldName+".year", NON_INTEGER_YEAR);
|
errors.put(fieldName+"-year", NON_INTEGER_YEAR);
|
||||||
if( ! canParseToNumber(fieldName+".month" ,qp))
|
if( ! canParseToNumber(fieldName+"-month" ,qp))
|
||||||
errors.put(fieldName+".month", NON_INTEGER_MONTH);
|
errors.put(fieldName+"-month", NON_INTEGER_MONTH);
|
||||||
if( ! canParseToNumber(fieldName+".day" ,qp))
|
if( ! canParseToNumber(fieldName+"-day" ,qp))
|
||||||
errors.put(fieldName+".day", NON_INTEGER_DAY);
|
errors.put(fieldName+"-day", NON_INTEGER_DAY);
|
||||||
if( ! canParseToNumber(fieldName+".hour" ,qp))
|
if( ! canParseToNumber(fieldName+"-hour" ,qp))
|
||||||
errors.put(fieldName+".hour", NON_INTEGER_HOUR);
|
errors.put(fieldName+"-hour", NON_INTEGER_HOUR);
|
||||||
if( ! canParseToNumber(fieldName+".minute" ,qp))
|
if( ! canParseToNumber(fieldName+"-minute" ,qp))
|
||||||
errors.put(fieldName+".minute", NON_INTEGER_HOUR);
|
errors.put(fieldName+"-minute", NON_INTEGER_HOUR);
|
||||||
if( ! canParseToNumber(fieldName+".second" ,qp))
|
if( ! canParseToNumber(fieldName+"-second" ,qp))
|
||||||
errors.put(fieldName+".second", NON_INTEGER_SECOND);
|
errors.put(fieldName+"-second", NON_INTEGER_SECOND);
|
||||||
}
|
}
|
||||||
|
|
||||||
//check if we can make a valid date with these integers
|
//check if we can make a valid date with these integers
|
||||||
year = parseToInt(fieldName+".year", qp);
|
year = parseToInt(fieldName+"-year", qp);
|
||||||
if( year == null )
|
if( year == null )
|
||||||
year = 1999;
|
year = 1999;
|
||||||
month= parseToInt(fieldName+".month", qp);
|
month= parseToInt(fieldName+"-month", qp);
|
||||||
if(month == null )
|
if(month == null )
|
||||||
month = 1;
|
month = 1;
|
||||||
day = parseToInt(fieldName+".day", qp);
|
day = parseToInt(fieldName+"-day", qp);
|
||||||
if( day == null )
|
if( day == null )
|
||||||
day = 1;
|
day = 1;
|
||||||
hour = parseToInt(fieldName+".hour", qp);
|
hour = parseToInt(fieldName+"-hour", qp);
|
||||||
if( hour == null )
|
if( hour == null )
|
||||||
hour = 0;
|
hour = 0;
|
||||||
minute = parseToInt(fieldName+".minute",qp);
|
minute = parseToInt(fieldName+"-minute",qp);
|
||||||
if( minute == null )
|
if( minute == null )
|
||||||
minute = 0;
|
minute = 0;
|
||||||
second = parseToInt(fieldName+".second", qp);
|
second = parseToInt(fieldName+"-second", qp);
|
||||||
if( second == null )
|
if( second == null )
|
||||||
second = 0;
|
second = 0;
|
||||||
|
|
||||||
|
@ -506,27 +506,27 @@ public class DateTimeWithPrecision extends BaseEditElement {
|
||||||
try{
|
try{
|
||||||
dateTime = dateTime.withYear(year);
|
dateTime = dateTime.withYear(year);
|
||||||
}catch(IllegalArgumentException iae){
|
}catch(IllegalArgumentException iae){
|
||||||
errors.put(fieldName+".year", iae.getLocalizedMessage());
|
errors.put(fieldName+"-year", iae.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
try{
|
try{
|
||||||
dateTime = dateTime.withMonthOfYear(month);
|
dateTime = dateTime.withMonthOfYear(month);
|
||||||
}catch(IllegalArgumentException iae){
|
}catch(IllegalArgumentException iae){
|
||||||
errors.put(fieldName+".month", iae.getLocalizedMessage());
|
errors.put(fieldName+"-month", iae.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
try{
|
try{
|
||||||
dateTime = dateTime.withDayOfMonth(day);
|
dateTime = dateTime.withDayOfMonth(day);
|
||||||
}catch(IllegalArgumentException iae){
|
}catch(IllegalArgumentException iae){
|
||||||
errors.put(fieldName+".day", iae.getLocalizedMessage());
|
errors.put(fieldName+"-day", iae.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
try{
|
try{
|
||||||
dateTime = dateTime.withHourOfDay(hour);
|
dateTime = dateTime.withHourOfDay(hour);
|
||||||
}catch(IllegalArgumentException iae){
|
}catch(IllegalArgumentException iae){
|
||||||
errors.put(fieldName+".hour", iae.getLocalizedMessage());
|
errors.put(fieldName+"-hour", iae.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
try{
|
try{
|
||||||
dateTime = dateTime.withSecondOfMinute(second);
|
dateTime = dateTime.withSecondOfMinute(second);
|
||||||
}catch(IllegalArgumentException iae){
|
}catch(IllegalArgumentException iae){
|
||||||
errors.put(fieldName+".second", iae.getLocalizedMessage());
|
errors.put(fieldName+"-second", iae.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors;
|
return errors;
|
||||||
|
@ -605,8 +605,8 @@ public class DateTimeWithPrecision extends BaseEditElement {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getValueVariableName(){ return fieldName + ".value" ; }
|
public String getValueVariableName(){ return fieldName + "-value" ; }
|
||||||
public String getPrecisionVariableName(){ return fieldName + ".precision" ; }
|
public String getPrecisionVariableName(){ return fieldName + "-precision" ; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,12 +49,12 @@ public class DateTimeWithPrecisionTest {
|
||||||
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
||||||
|
|
||||||
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"12"});
|
||||||
queryParameters.put(FIELDNAME+".day", new String[]{"01"});
|
queryParameters.put(FIELDNAME+"-day", new String[]{"01"});
|
||||||
queryParameters.put(FIELDNAME+".hour", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-hour", new String[]{"12"});
|
||||||
queryParameters.put(FIELDNAME+".minute", new String[]{"00"});
|
queryParameters.put(FIELDNAME+"-minute", new String[]{"00"});
|
||||||
queryParameters.put(FIELDNAME+".second", new String[]{"00"});
|
queryParameters.put(FIELDNAME+"-second", new String[]{"00"});
|
||||||
EditConfiguration editConfig=null;
|
EditConfiguration editConfig=null;
|
||||||
Map<String,String> validationMsgs = dtwp.getValidationMessages("testfield", editConfig, queryParameters);
|
Map<String,String> validationMsgs = dtwp.getValidationMessages("testfield", editConfig, queryParameters);
|
||||||
Assert.assertNotNull(validationMsgs);
|
Assert.assertNotNull(validationMsgs);
|
||||||
|
@ -76,11 +76,11 @@ public class DateTimeWithPrecisionTest {
|
||||||
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
||||||
|
|
||||||
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"12"});
|
||||||
queryParameters.put(FIELDNAME+".day", new String[]{"01"});
|
queryParameters.put(FIELDNAME+"-day", new String[]{"01"});
|
||||||
queryParameters.put(FIELDNAME+".hour", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-hour", new String[]{"12"});
|
||||||
queryParameters.put(FIELDNAME+".minute", new String[]{"00"});
|
queryParameters.put(FIELDNAME+"-minute", new String[]{"00"});
|
||||||
//no seconds
|
//no seconds
|
||||||
|
|
||||||
EditConfiguration editConfig=null;
|
EditConfiguration editConfig=null;
|
||||||
|
@ -96,17 +96,17 @@ public class DateTimeWithPrecisionTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void precisionHourssValidationTest() throws Exception{
|
public void precisionHoursValidationTest() throws Exception{
|
||||||
String FIELDNAME = "testfield";
|
String FIELDNAME = "testfield";
|
||||||
Field field = new Field();
|
Field field = new Field();
|
||||||
field.setName(FIELDNAME);
|
field.setName(FIELDNAME);
|
||||||
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
||||||
|
|
||||||
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"12"});
|
||||||
queryParameters.put(FIELDNAME+".day", new String[]{"01"});
|
queryParameters.put(FIELDNAME+"-day", new String[]{"01"});
|
||||||
queryParameters.put(FIELDNAME+".hour", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-hour", new String[]{"12"});
|
||||||
//no minutes
|
//no minutes
|
||||||
//no seconds
|
//no seconds
|
||||||
|
|
||||||
|
@ -130,9 +130,9 @@ public class DateTimeWithPrecisionTest {
|
||||||
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
||||||
|
|
||||||
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"12"});
|
||||||
queryParameters.put(FIELDNAME+".day", new String[]{"01"});
|
queryParameters.put(FIELDNAME+"-day", new String[]{"01"});
|
||||||
//no hours
|
//no hours
|
||||||
//no minutes
|
//no minutes
|
||||||
//no seconds
|
//no seconds
|
||||||
|
@ -157,8 +157,8 @@ public class DateTimeWithPrecisionTest {
|
||||||
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
||||||
|
|
||||||
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"12"});
|
||||||
//no days
|
//no days
|
||||||
//no hours
|
//no hours
|
||||||
//no minutes
|
//no minutes
|
||||||
|
@ -184,7 +184,7 @@ public class DateTimeWithPrecisionTest {
|
||||||
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
||||||
|
|
||||||
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
//no months
|
//no months
|
||||||
//no days
|
//no days
|
||||||
//no hours
|
//no hours
|
||||||
|
@ -243,7 +243,7 @@ public class DateTimeWithPrecisionTest {
|
||||||
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field);
|
||||||
|
|
||||||
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
//no months
|
//no months
|
||||||
//no days
|
//no days
|
||||||
//no hours
|
//no hours
|
||||||
|
@ -279,9 +279,9 @@ public class DateTimeWithPrecisionTest {
|
||||||
|
|
||||||
/* Check if it works with day number under 29 */
|
/* Check if it works with day number under 29 */
|
||||||
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
Map<String,String[]> queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"12"});
|
||||||
queryParameters.put(FIELDNAME+".day", new String[]{"28"});
|
queryParameters.put(FIELDNAME+"-day", new String[]{"28"});
|
||||||
|
|
||||||
Map<String,String> validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters);
|
Map<String,String> validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters);
|
||||||
Assert.assertNotNull(validationMsgs);
|
Assert.assertNotNull(validationMsgs);
|
||||||
|
@ -293,9 +293,9 @@ public class DateTimeWithPrecisionTest {
|
||||||
|
|
||||||
/* Check for days greater than 28 */
|
/* Check for days greater than 28 */
|
||||||
queryParameters = new HashMap<String, String[]>();
|
queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"12"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"12"});
|
||||||
queryParameters.put(FIELDNAME+".day", new String[]{"30"});
|
queryParameters.put(FIELDNAME+"-day", new String[]{"30"});
|
||||||
|
|
||||||
validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters);
|
validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters);
|
||||||
Assert.assertNotNull(validationMsgs);
|
Assert.assertNotNull(validationMsgs);
|
||||||
|
@ -307,9 +307,9 @@ public class DateTimeWithPrecisionTest {
|
||||||
|
|
||||||
/* Check for leap year */
|
/* Check for leap year */
|
||||||
queryParameters = new HashMap<String, String[]>();
|
queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"2000" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"2000" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"2"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"2"});
|
||||||
queryParameters.put(FIELDNAME+".day", new String[]{"29"});
|
queryParameters.put(FIELDNAME+"-day", new String[]{"29"});
|
||||||
|
|
||||||
validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters);
|
validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters);
|
||||||
Assert.assertNotNull(validationMsgs);
|
Assert.assertNotNull(validationMsgs);
|
||||||
|
@ -321,9 +321,9 @@ public class DateTimeWithPrecisionTest {
|
||||||
|
|
||||||
/* check for non leap year */
|
/* check for non leap year */
|
||||||
queryParameters = new HashMap<String, String[]>();
|
queryParameters = new HashMap<String, String[]>();
|
||||||
queryParameters.put(FIELDNAME+".year", new String[]{"1999" });
|
queryParameters.put(FIELDNAME+"-year", new String[]{"1999" });
|
||||||
queryParameters.put(FIELDNAME+".month", new String[]{"2"});
|
queryParameters.put(FIELDNAME+"-month", new String[]{"2"});
|
||||||
queryParameters.put(FIELDNAME+".day", new String[]{"29"});
|
queryParameters.put(FIELDNAME+"-day", new String[]{"29"});
|
||||||
|
|
||||||
validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters);
|
validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters);
|
||||||
Assert.assertNotNull(validationMsgs);
|
Assert.assertNotNull(validationMsgs);
|
||||||
|
|
|
@ -56,8 +56,8 @@
|
||||||
?intervalNode <${type}> <${intervalType}> .
|
?intervalNode <${type}> <${intervalType}> .
|
||||||
?intervalNode <${intervalToStart}> ?startNode .
|
?intervalNode <${intervalToStart}> ?startNode .
|
||||||
?startNode <${type}> <${dateTimeValueType}> .
|
?startNode <${type}> <${dateTimeValueType}> .
|
||||||
?startNode <${dateTimeValue}> ?startField.value .
|
?startNode <${dateTimeValue}> ?startField-value .
|
||||||
?startNode <${dateTimePrecision}> ?startField.precision .
|
?startNode <${dateTimePrecision}> ?startField-precision .
|
||||||
</v:jsonset>
|
</v:jsonset>
|
||||||
|
|
||||||
<v:jsonset var="n3ForEnd">
|
<v:jsonset var="n3ForEnd">
|
||||||
|
@ -65,8 +65,8 @@
|
||||||
?intervalNode <${type}> <${intervalType}> .
|
?intervalNode <${type}> <${intervalType}> .
|
||||||
?intervalNode <${intervalToEnd}> ?endNode .
|
?intervalNode <${intervalToEnd}> ?endNode .
|
||||||
?endNode <${type}> <${dateTimeValueType}> .
|
?endNode <${type}> <${dateTimeValueType}> .
|
||||||
?endNode <${dateTimeValue}> ?endField.value .
|
?endNode <${dateTimeValue}> ?endField-value .
|
||||||
?endNode <${dateTimePrecision}> ?endField.precision .
|
?endNode <${dateTimePrecision}> ?endField-precision .
|
||||||
</v:jsonset>
|
</v:jsonset>
|
||||||
|
|
||||||
<%-- Queries for editing an existing role --%>
|
<%-- Queries for editing an existing role --%>
|
||||||
|
@ -175,15 +175,15 @@
|
||||||
"sparqlForLiterals" : { },
|
"sparqlForLiterals" : { },
|
||||||
"sparqlForUris" : { },
|
"sparqlForUris" : { },
|
||||||
"sparqlForExistingLiterals" : {
|
"sparqlForExistingLiterals" : {
|
||||||
"startField.value" : "${existingStartDateQuery}",
|
"startField-value" : "${existingStartDateQuery}",
|
||||||
"endField.value" : "${existingEndDateQuery}"
|
"endField-value" : "${existingEndDateQuery}"
|
||||||
},
|
},
|
||||||
"sparqlForExistingUris" : {
|
"sparqlForExistingUris" : {
|
||||||
"intervalNode" : "${existingIntervalNodeQuery}",
|
"intervalNode" : "${existingIntervalNodeQuery}",
|
||||||
"startNode" : "${existingStartNodeQuery}",
|
"startNode" : "${existingStartNodeQuery}",
|
||||||
"endNode" : "${existingEndNodeQuery}",
|
"endNode" : "${existingEndNodeQuery}",
|
||||||
"startField.precision": "${existingStartPrecisionQuery}",
|
"startField-precision": "${existingStartPrecisionQuery}",
|
||||||
"endField.precision" : "${existingEndPrecisionQuery}"
|
"endField-precision" : "${existingEndPrecisionQuery}"
|
||||||
},
|
},
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"startField" : {
|
"startField" : {
|
||||||
|
|
|
@ -51,8 +51,8 @@
|
||||||
<v:jsonset var="n3ForValue">
|
<v:jsonset var="n3ForValue">
|
||||||
?subject <${toDateTimeValue}> ?valueNode .
|
?subject <${toDateTimeValue}> ?valueNode .
|
||||||
?valueNode <${type}> <${valueType}> .
|
?valueNode <${type}> <${valueType}> .
|
||||||
?valueNode <${dateTimeValue}> ?dateTimeField.value .
|
?valueNode <${dateTimeValue}> ?dateTimeField-value .
|
||||||
?valueNode <${dateTimePrecision}> ?dateTimeField.precision .
|
?valueNode <${dateTimePrecision}> ?dateTimeField-precision .
|
||||||
</v:jsonset>
|
</v:jsonset>
|
||||||
|
|
||||||
<%-- Queries for editing an existing role --%>
|
<%-- Queries for editing an existing role --%>
|
||||||
|
@ -120,11 +120,11 @@
|
||||||
"sparqlForLiterals" : { },
|
"sparqlForLiterals" : { },
|
||||||
"sparqlForUris" : { },
|
"sparqlForUris" : { },
|
||||||
"sparqlForExistingLiterals" : {
|
"sparqlForExistingLiterals" : {
|
||||||
"dateTimeField.value" : "${existingDateTimeValueQuery}",
|
"dateTimeField-value" : "${existingDateTimeValueQuery}",
|
||||||
},
|
},
|
||||||
"sparqlForExistingUris" : {
|
"sparqlForExistingUris" : {
|
||||||
"valueNode" : "${existingNodeQuery}",
|
"valueNode" : "${existingNodeQuery}",
|
||||||
"dateTimeField.precision": "${existingPrecisionQuery}"
|
"dateTimeField-precision": "${existingPrecisionQuery}"
|
||||||
},
|
},
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"dateTimeField" : {
|
"dateTimeField" : {
|
||||||
|
|
|
@ -40,21 +40,21 @@ This is a test file for the DateTimeWithPrecision EditElement.
|
||||||
<v:jsonset var="sparqlForDxPrecision" >
|
<v:jsonset var="sparqlForDxPrecision" >
|
||||||
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
|
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
|
||||||
PREFIX core: <http://vivoweb.org/ontology/core#>
|
PREFIX core: <http://vivoweb.org/ontology/core#>
|
||||||
SELECT ?dtX.precision WHERE {
|
SELECT ?dtX-precision WHERE {
|
||||||
?subject ?predicate ?object .
|
?subject ?predicate ?object .
|
||||||
?object <core:hasDateTimeValue> ?dtX.
|
?object <core:hasDateTimeValue> ?dtX.
|
||||||
?dtX <rdf:type> <core:DateTimeValue> .
|
?dtX <rdf:type> <core:DateTimeValue> .
|
||||||
?dtX <core:dateTimePrecision> ?dtX.precision .
|
?dtX <core:dateTimePrecision> ?dtX-precision .
|
||||||
</v:jsonset>
|
</v:jsonset>
|
||||||
|
|
||||||
<v:jsonset var="sparqlForDxValue" >
|
<v:jsonset var="sparqlForDxValue" >
|
||||||
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
|
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
|
||||||
PREFIX core: <http://vivoweb.org/ontology/core#>
|
PREFIX core: <http://vivoweb.org/ontology/core#>
|
||||||
SELECT ?dtX.value WHERE {
|
SELECT ?dtX-value WHERE {
|
||||||
?subject ?predicate ?object .
|
?subject ?predicate ?object .
|
||||||
?object <core:hasDateTimeValue> ?dtX.
|
?object <core:hasDateTimeValue> ?dtX.
|
||||||
?dtX <rdf:type> <core:DateTimeValue> .
|
?dtX <rdf:type> <core:DateTimeValue> .
|
||||||
?dtX <core:dateTime> ?dtX.value .
|
?dtX <core:dateTime> ?dtX-value .
|
||||||
</v:jsonset>
|
</v:jsonset>
|
||||||
|
|
||||||
<v:jsonset var="n3ForEdit" >
|
<v:jsonset var="n3ForEdit" >
|
||||||
|
@ -68,8 +68,8 @@ This is a test file for the DateTimeWithPrecision EditElement.
|
||||||
?object <core:hasDateTimeValue> ?dtX.
|
?object <core:hasDateTimeValue> ?dtX.
|
||||||
?dtX <rdf:type> <core:DateTimeValue> .
|
?dtX <rdf:type> <core:DateTimeValue> .
|
||||||
|
|
||||||
?dtX <core:dateTime> ?dtX.value .
|
?dtX <core:dateTime> ?dtX-value .
|
||||||
?dtX <core:dateTimePrecision> ?dtX.precision .
|
?dtX <core:dateTimePrecision> ?dtX-precision .
|
||||||
</v:jsonset>
|
</v:jsonset>
|
||||||
|
|
||||||
<c:set var="editjson" scope="request">
|
<c:set var="editjson" scope="request">
|
||||||
|
@ -92,8 +92,8 @@ This is a test file for the DateTimeWithPrecision EditElement.
|
||||||
"filesOnForm" : [ ],
|
"filesOnForm" : [ ],
|
||||||
"sparqlForLiterals" : { },
|
"sparqlForLiterals" : { },
|
||||||
"sparqlForUris" : { },
|
"sparqlForUris" : { },
|
||||||
"sparqlForExistingLiterals" : { "dtX.value": "${sparqlForDxValue}" },
|
"sparqlForExistingLiterals" : { "dtX-value": "${sparqlForDxValue}" },
|
||||||
"sparqlForExistingUris" : { "dtX.precision": "${sparqlForDxPrecision}" },
|
"sparqlForExistingUris" : { "dtX-precision": "${sparqlForDxPrecision}" },
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"dtX" : {
|
"dtX" : {
|
||||||
"newResource" : "true",
|
"newResource" : "true",
|
||||||
|
|
|
@ -35,7 +35,7 @@ vitro.customFormUtils = {
|
||||||
// For now we can remove the error elements. Later we may include them in
|
// For now we can remove the error elements. Later we may include them in
|
||||||
// the markup, for customized positioning, in which case we will empty them
|
// the markup, for customized positioning, in which case we will empty them
|
||||||
// but not remove them here. See findValidationErrors().
|
// but not remove them here. See findValidationErrors().
|
||||||
$('*[id=' + $(this).attr('id') + '_validationError]').remove();
|
$('[id=' + $(this).attr('id') + '_validationError]').remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
148
webapp/web/js/jquery.js
vendored
148
webapp/web/js/jquery.js
vendored
File diff suppressed because one or more lines are too long
|
@ -72,13 +72,13 @@ precisionConstants.second -- URI for precision
|
||||||
|
|
||||||
<#if precLevel gte 1>
|
<#if precLevel gte 1>
|
||||||
<#-- Only text input field in the mix. We should have some validation to ensure it's a valid year (4 digits, integer, etc) -->
|
<#-- Only text input field in the mix. We should have some validation to ensure it's a valid year (4 digits, integer, etc) -->
|
||||||
<label for="${fieldName}.year">Year<#if reqLevel gte 1> <span class="requiredHint">*</span></#if></label>
|
<label for="${fieldName}-year">Year<#if reqLevel gte 1> <span class="requiredHint">*</span></#if></label>
|
||||||
<input class="text-field" name="${fieldName}.year" id="${fieldName}.year" type="text" value="${year!}" size="4" maxlength="4" <#if reqLevel gte 1>required </#if>/>
|
<input class="text-field" name="${fieldName}-year" id="${fieldName}-year" type="text" value="${year!}" size="4" maxlength="4" <#if reqLevel gte 1>required </#if>/>
|
||||||
</#if>
|
</#if>
|
||||||
|
|
||||||
<#if precLevel gte 2>
|
<#if precLevel gte 2>
|
||||||
<label for="${fieldName}.month">Month<#if reqLevel gte 2> <span class="requiredHint">*</span></#if></label>
|
<label for="${fieldName}-month">Month<#if reqLevel gte 2> <span class="requiredHint">*</span></#if></label>
|
||||||
<select name="${fieldName}.month" id="${fieldName}.month" <#if reqLevel gte 2>required </#if>>
|
<select name="${fieldName}-month" id="${fieldName}-month" <#if reqLevel gte 2>required </#if>>
|
||||||
<option value=""<#if !month??> selected="selected"</#if>>month</option>
|
<option value=""<#if !month??> selected="selected"</#if>>month</option>
|
||||||
<#assign numMonths = 12 />
|
<#assign numMonths = 12 />
|
||||||
<#list 1..numMonths as currentMonth>
|
<#list 1..numMonths as currentMonth>
|
||||||
|
@ -88,8 +88,8 @@ precisionConstants.second -- URI for precision
|
||||||
</#if>
|
</#if>
|
||||||
|
|
||||||
<#if precLevel gte 3>
|
<#if precLevel gte 3>
|
||||||
<label for="${fieldName}.day">Day<#if reqLevel gte 3> <span class="requiredHint">*</span></#if></label>
|
<label for="${fieldName}-day">Day<#if reqLevel gte 3> <span class="requiredHint">*</span></#if></label>
|
||||||
<select name="${fieldName}.day" id="${fieldName}.day" <#if reqLevel gte 3>required </#if>>
|
<select name="${fieldName}-day" id="${fieldName}-day" <#if reqLevel gte 3>required </#if>>
|
||||||
<option value=""<#if !day??> selected="selected"</#if>>day</option>
|
<option value=""<#if !day??> selected="selected"</#if>>day</option>
|
||||||
<#assign numDays = 31 />
|
<#assign numDays = 31 />
|
||||||
<#list 1..numDays as currentDay>
|
<#list 1..numDays as currentDay>
|
||||||
|
@ -100,8 +100,8 @@ precisionConstants.second -- URI for precision
|
||||||
|
|
||||||
<#if precLevel gte 4>
|
<#if precLevel gte 4>
|
||||||
<#-- We'll need to make this more flexible to support 24 hour display down the road. For now assuming 12h with am/pm -->
|
<#-- We'll need to make this more flexible to support 24 hour display down the road. For now assuming 12h with am/pm -->
|
||||||
<label for="${fieldName}.hour">Hour<#if reqLevel gte 4> <span class="requiredHint">*</span></#if></label>
|
<label for="${fieldName}-hour">Hour<#if reqLevel gte 4> <span class="requiredHint">*</span></#if></label>
|
||||||
<select name="${fieldName}.hour" id="${fieldName}.hour" <#if reqLevel gte 3>required </#if>>
|
<select name="${fieldName}-hour" id="${fieldName}-hour" <#if reqLevel gte 3>required </#if>>
|
||||||
<option value=""<#if !hour??> selected="selected"</#if>>hour</option>
|
<option value=""<#if !hour??> selected="selected"</#if>>hour</option>
|
||||||
<#assign numHours = 23 />
|
<#assign numHours = 23 />
|
||||||
<#list 0..numHours as currentHour>
|
<#list 0..numHours as currentHour>
|
||||||
|
@ -123,8 +123,8 @@ precisionConstants.second -- URI for precision
|
||||||
</#if>
|
</#if>
|
||||||
|
|
||||||
<#if precLevel gte 5>
|
<#if precLevel gte 5>
|
||||||
<label for="${fieldName}.minute">Minutes<#if reqLevel gte 5> <span class="requiredHint">*</span></#if></label>
|
<label for="${fieldName}-minute">Minutes<#if reqLevel gte 5> <span class="requiredHint">*</span></#if></label>
|
||||||
<select name="${fieldName}.minute" id="${fieldName}.minute" <#if reqLevel gte 5>required </#if>>
|
<select name="${fieldName}-minute" id="${fieldName}-minute" <#if reqLevel gte 5>required </#if>>
|
||||||
<option value=""<#if !minute??> selected="selected"</#if>>minutes</option>
|
<option value=""<#if !minute??> selected="selected"</#if>>minutes</option>
|
||||||
<#assign numMinutes = 59 />
|
<#assign numMinutes = 59 />
|
||||||
<#list 1..numMinutes as currentMinute>
|
<#list 1..numMinutes as currentMinute>
|
||||||
|
@ -134,8 +134,8 @@ precisionConstants.second -- URI for precision
|
||||||
</#if>
|
</#if>
|
||||||
|
|
||||||
<#if precLevel gte 6>
|
<#if precLevel gte 6>
|
||||||
<label for="${fieldName}.second">Seconds<#if reqLevel gte 6> <span class="requiredHint">*</span></#if></label>
|
<label for="${fieldName}-second">Seconds<#if reqLevel gte 6> <span class="requiredHint">*</span></#if></label>
|
||||||
<select name="${fieldName}.second" id="${fieldName}.second" <#if reqLevel gte 6>required </#if>>
|
<select name="${fieldName}-second" id="${fieldName}-second" <#if reqLevel gte 6>required </#if>>
|
||||||
<option value=""<#if !second??> selected="selected"</#if>>seconds</option>
|
<option value=""<#if !second??> selected="selected"</#if>>seconds</option>
|
||||||
<#assign numMinutes = 59 />
|
<#assign numMinutes = 59 />
|
||||||
<#list 1..numMinutes as currentSecond>
|
<#list 1..numMinutes as currentSecond>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue