Fixed Issue 488: ISO 8601 dates not supported in cell editing - cell-ui.js.
git-svn-id: http://google-refine.googlecode.com/svn/trunk@2388 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
parent
cdca6fff8f
commit
9360e3f71a
@ -85,6 +85,9 @@ licenses/dom4j.LICENSE.txt
|
|||||||
licenses/simile.LICENSE.txt
|
licenses/simile.LICENSE.txt
|
||||||
simile vicino
|
simile vicino
|
||||||
|
|
||||||
|
licenses/simile-ajax.2.3.0.LICENSE.txt
|
||||||
|
Simile Ajax
|
||||||
|
|
||||||
licenses/arithcode.LICENSE.txt
|
licenses/arithcode.LICENSE.txt
|
||||||
arithcode
|
arithcode
|
||||||
|
|
||||||
@ -94,7 +97,6 @@ licenses/freebase_suggest.LICENSE.txt
|
|||||||
licenses/chrome_frame.LICENSE.txt
|
licenses/chrome_frame.LICENSE.txt
|
||||||
CFInstall
|
CFInstall
|
||||||
|
|
||||||
|
|
||||||
MIT
|
MIT
|
||||||
---
|
---
|
||||||
|
|
||||||
|
35
licenses/simile-ajax.2.3.0.LICENSE.txt
Normal file
35
licenses/simile-ajax.2.3.0.LICENSE.txt
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* (c) Copyright The SIMILE Project 2008. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. The name of the author may not be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* Note: JQuery, www.jquery.com is included in this distribution. It is
|
||||||
|
* covered by its own license:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008 John Resig (jquery.com)
|
||||||
|
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||||
|
* and GPL (GPL-LICENSE.txt) licenses.
|
||||||
|
*/
|
@ -316,6 +316,7 @@ function init() {
|
|||||||
"scripts/util/menu.js",
|
"scripts/util/menu.js",
|
||||||
"scripts/util/dialog.js",
|
"scripts/util/dialog.js",
|
||||||
"scripts/util/dom.js",
|
"scripts/util/dom.js",
|
||||||
|
"scripts/util/date-time.js",
|
||||||
"scripts/util/encoding.js",
|
"scripts/util/encoding.js",
|
||||||
|
|
||||||
"scripts/index.js",
|
"scripts/index.js",
|
||||||
@ -391,6 +392,7 @@ function init() {
|
|||||||
"scripts/util/menu.js",
|
"scripts/util/menu.js",
|
||||||
"scripts/util/dialog.js",
|
"scripts/util/dialog.js",
|
||||||
"scripts/util/dom.js",
|
"scripts/util/dom.js",
|
||||||
|
"scripts/util/date-time.js",
|
||||||
"scripts/util/custom-suggest.js",
|
"scripts/util/custom-suggest.js",
|
||||||
"scripts/util/encoding.js",
|
"scripts/util/encoding.js",
|
||||||
|
|
||||||
|
232
main/webapp/modules/core/scripts/util/date-time.js
Normal file
232
main/webapp/modules/core/scripts/util/date-time.js
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright 2011, Google Inc.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
|
in the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following code has been adapted from the Simile Ajax library at
|
||||||
|
* http://code.google.com/p/simile-widgets/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright The SIMILE Project 2008. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. The name of the author may not be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* Note: JQuery, www.jquery.com is included in this distribution. It is
|
||||||
|
* covered by its own license:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008 John Resig (jquery.com)
|
||||||
|
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||||
|
* and GPL (GPL-LICENSE.txt) licenses.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DateTimeUtil = {};
|
||||||
|
|
||||||
|
DateTimeUtil._dateRegexp = new RegExp(
|
||||||
|
"^(-?)([0-9]{4})(" + [
|
||||||
|
"(-?([0-9]{2})(-?([0-9]{2}))?)", // -month-dayOfMonth
|
||||||
|
"(-?([0-9]{3}))", // -dayOfYear
|
||||||
|
"(-?W([0-9]{2})(-?([1-7]))?)" // -Wweek-dayOfWeek
|
||||||
|
].join("|") + ")?$"
|
||||||
|
);
|
||||||
|
DateTimeUtil._timezoneRegexp = new RegExp(
|
||||||
|
"Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$"
|
||||||
|
);
|
||||||
|
DateTimeUtil._timeRegexp = new RegExp(
|
||||||
|
"^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$"
|
||||||
|
);
|
||||||
|
|
||||||
|
DateTimeUtil.setIso8601Date = function(dateObject, string) {
|
||||||
|
/*
|
||||||
|
* This function has been adapted from dojo.date, v.0.3.0
|
||||||
|
* http://dojotoolkit.org/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var d = string.match(DateTimeUtil._dateRegexp);
|
||||||
|
if(!d) {
|
||||||
|
throw new Error("Invalid date string: " + string);
|
||||||
|
}
|
||||||
|
|
||||||
|
var sign = (d[1] == "-") ? -1 : 1; // BC or AD
|
||||||
|
var year = sign * d[2];
|
||||||
|
var month = d[5];
|
||||||
|
var date = d[7];
|
||||||
|
var dayofyear = d[9];
|
||||||
|
var week = d[11];
|
||||||
|
var dayofweek = (d[13]) ? d[13] : 1;
|
||||||
|
|
||||||
|
dateObject.setUTCFullYear(year);
|
||||||
|
if (dayofyear) {
|
||||||
|
dateObject.setUTCMonth(0);
|
||||||
|
dateObject.setUTCDate(Number(dayofyear));
|
||||||
|
} else if (week) {
|
||||||
|
dateObject.setUTCMonth(0);
|
||||||
|
dateObject.setUTCDate(1);
|
||||||
|
var gd = dateObject.getUTCDay();
|
||||||
|
var day = (gd) ? gd : 7;
|
||||||
|
var offset = Number(dayofweek) + (7 * Number(week));
|
||||||
|
|
||||||
|
if (day <= 4) {
|
||||||
|
dateObject.setUTCDate(offset + 1 - day);
|
||||||
|
} else {
|
||||||
|
dateObject.setUTCDate(offset + 8 - day);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (month) {
|
||||||
|
dateObject.setUTCDate(1);
|
||||||
|
dateObject.setUTCMonth(month - 1);
|
||||||
|
}
|
||||||
|
if (date) {
|
||||||
|
dateObject.setUTCDate(date);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dateObject;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes a date object and a string containing an ISO 8601 time and sets the
|
||||||
|
* the time using information parsed from the string. Note that this method
|
||||||
|
* does not parse any date information.
|
||||||
|
*
|
||||||
|
* @param {Date} dateObject the date object to modify
|
||||||
|
* @param {String} string an ISO 8601 string to parse
|
||||||
|
* @return {Date} the modified date object
|
||||||
|
*/
|
||||||
|
DateTimeUtil.setIso8601Time = function (dateObject, string) {
|
||||||
|
/*
|
||||||
|
* This function has been adapted from dojo.date, v.0.3.0
|
||||||
|
* http://dojotoolkit.org/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var d = string.match(DateTimeUtil._timeRegexp);
|
||||||
|
if(!d) {
|
||||||
|
SimileAjax.Debug.warn("Invalid time string: " + string);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var hours = d[1];
|
||||||
|
var mins = Number((d[3]) ? d[3] : 0);
|
||||||
|
var secs = (d[5]) ? d[5] : 0;
|
||||||
|
var ms = d[7] ? (Number("0." + d[7]) * 1000) : 0;
|
||||||
|
|
||||||
|
dateObject.setUTCHours(hours);
|
||||||
|
dateObject.setUTCMinutes(mins);
|
||||||
|
dateObject.setUTCSeconds(secs);
|
||||||
|
dateObject.setUTCMilliseconds(ms);
|
||||||
|
|
||||||
|
return dateObject;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The timezone offset in minutes in the user's browser.
|
||||||
|
* @type Number
|
||||||
|
*/
|
||||||
|
DateTimeUtil.timezoneOffset = new Date().getTimezoneOffset();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes a date object and a string containing an ISO 8601 date and time and
|
||||||
|
* sets the date object using information parsed from the string.
|
||||||
|
*
|
||||||
|
* @param {Date} dateObject the date object to modify
|
||||||
|
* @param {String} string an ISO 8601 string to parse
|
||||||
|
* @return {Date} the modified date object
|
||||||
|
*/
|
||||||
|
DateTimeUtil.setIso8601 = function (dateObject, string){
|
||||||
|
/*
|
||||||
|
* This function has been adapted from dojo.date, v.0.3.0
|
||||||
|
* http://dojotoolkit.org/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var offset = null;
|
||||||
|
var comps = (string.indexOf("T") == -1) ? string.split(" ") : string.split("T");
|
||||||
|
|
||||||
|
DateTimeUtil.setIso8601Date(dateObject, comps[0]);
|
||||||
|
if (comps.length == 2) {
|
||||||
|
// first strip timezone info from the end
|
||||||
|
var d = comps[1].match(DateTimeUtil._timezoneRegexp);
|
||||||
|
if (d) {
|
||||||
|
if (d[0] == 'Z') {
|
||||||
|
offset = 0;
|
||||||
|
} else {
|
||||||
|
offset = (Number(d[3]) * 60) + Number(d[5]);
|
||||||
|
offset *= ((d[2] == '-') ? 1 : -1);
|
||||||
|
}
|
||||||
|
comps[1] = comps[1].substr(0, comps[1].length - d[0].length);
|
||||||
|
}
|
||||||
|
|
||||||
|
DateTimeUtil.setIso8601Time(dateObject, comps[1]);
|
||||||
|
}
|
||||||
|
if (offset == null) {
|
||||||
|
offset = dateObject.getTimezoneOffset(); // local time zone if no tz info
|
||||||
|
}
|
||||||
|
dateObject.setTime(dateObject.getTime() + offset * 60000);
|
||||||
|
|
||||||
|
return dateObject;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes a string containing an ISO 8601 date and returns a newly instantiated
|
||||||
|
* date object with the parsed date and time information from the string.
|
||||||
|
*
|
||||||
|
* @param {String} string an ISO 8601 string to parse
|
||||||
|
* @return {Date} a new date object created from the string
|
||||||
|
*/
|
||||||
|
DateTimeUtil.parseIso8601DateTime = function (string) {
|
||||||
|
try {
|
||||||
|
return DateTimeUtil.setIso8601(new Date(0), string);
|
||||||
|
} catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
@ -488,6 +488,9 @@ DataTableCellUI.prototype._startEdit = function(elmt) {
|
|||||||
value = ("true" == text);
|
value = ("true" == text);
|
||||||
} else if (type == "date") {
|
} else if (type == "date") {
|
||||||
value = Date.parse(text);
|
value = Date.parse(text);
|
||||||
|
if (!value) {
|
||||||
|
value = DateTimeUtil.parseIso8601DateTime(text);
|
||||||
|
}
|
||||||
if (!value) {
|
if (!value) {
|
||||||
alert("Not a valid date.");
|
alert("Not a valid date.");
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user