|
|
@ -3,6 +3,10 @@
|
|
|
|
/**@file Classes and objects to help control user data in HTML pages
|
|
|
|
/**@file Classes and objects to help control user data in HTML pages
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function lpad(v) {
|
|
|
|
|
|
|
|
return v < 10 ? "0" + v : v;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** value format for numbers */
|
|
|
|
/** value format for numbers */
|
|
|
|
const numberFormat = {
|
|
|
|
const numberFormat = {
|
|
|
|
/**Parses the value for a number
|
|
|
|
/**Parses the value for a number
|
|
|
@ -44,12 +48,8 @@ const dateFormat = {
|
|
|
|
let _format = v => {
|
|
|
|
let _format = v => {
|
|
|
|
let date = "number" == typeof v ? new Date(v) : v;
|
|
|
|
let date = "number" == typeof v ? new Date(v) : v;
|
|
|
|
let year = date.getFullYear(),
|
|
|
|
let year = date.getFullYear(),
|
|
|
|
month = date.getMonth() + 1,
|
|
|
|
month = lpad(date.getMonth() + 1),
|
|
|
|
day = date.getDate();
|
|
|
|
day = lpad(date.getDate());
|
|
|
|
if (month < 10)
|
|
|
|
|
|
|
|
month = "0" + month;
|
|
|
|
|
|
|
|
if (day < 10)
|
|
|
|
|
|
|
|
day = "0" + day;
|
|
|
|
|
|
|
|
return year + "-" + month + "-" + day;
|
|
|
|
return year + "-" + month + "-" + day;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -62,22 +62,43 @@ const dateFormat = {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/** value format for datetimes */
|
|
|
|
/** value format for time */
|
|
|
|
const datetimeFormat = {
|
|
|
|
const timeFormat = {
|
|
|
|
/**Formats the value
|
|
|
|
/**Formats the value
|
|
|
|
* @param {number} value value to format
|
|
|
|
* @param {number} value value to format
|
|
|
|
* @returns {string} formatted value
|
|
|
|
* @returns {string} formatted value
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
format(value) {
|
|
|
|
format(value) {
|
|
|
|
let _format = v => {
|
|
|
|
let _format = v => {
|
|
|
|
let date = "number" == typeof v ? new Date(v) : v;
|
|
|
|
let date = "number" == typeof v ? new Date(v) : v,
|
|
|
|
return date.toLocaleTimeString();
|
|
|
|
hours = lpad(date.getHours()),
|
|
|
|
|
|
|
|
minutes = lpad(date.getMinutes()),
|
|
|
|
|
|
|
|
seconds = lpad(date.getSeconds());
|
|
|
|
|
|
|
|
return hours + ":" + minutes + ":" + seconds;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
switch (value instanceof Date ? "date" : typeof value) {
|
|
|
|
switch (value instanceof Date ? "date" : typeof value) {
|
|
|
|
case "number":
|
|
|
|
case "number":
|
|
|
|
case "date": return dateFormat.format(value) + " " + _format(value);
|
|
|
|
case "date": return _format(value);
|
|
|
|
case "string": return dateFormat.format(value) + " " + value.substr(8, 2) + ":" + value.substr(10, 2) + ":" + value.substr(12)
|
|
|
|
case "string":
|
|
|
|
|
|
|
|
let offset = value.length - 6;
|
|
|
|
|
|
|
|
return value.substr(0 + offset, 2) + ":" + value.substr(2 + offset, 2) + ":" + value.substr(4 + offset)
|
|
|
|
|
|
|
|
default: return "";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** value format for datetimes */
|
|
|
|
|
|
|
|
const datetimeFormat = {
|
|
|
|
|
|
|
|
/**Formats the value
|
|
|
|
|
|
|
|
* @param {number} value value to format
|
|
|
|
|
|
|
|
* @returns {string} formatted value
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
format(value) {
|
|
|
|
|
|
|
|
switch (value instanceof Date ? "date" : typeof value) {
|
|
|
|
|
|
|
|
case "number":
|
|
|
|
|
|
|
|
case "date": return dateFormat.format(value) + " " + timeFormat.format(value);
|
|
|
|
|
|
|
|
case "string": return dateFormat.format(value) + " " + timeFormat.format(value);
|
|
|
|
default: return "";
|
|
|
|
default: return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -450,6 +471,10 @@ class Dataset {
|
|
|
|
this._byKeys = {};
|
|
|
|
this._byKeys = {};
|
|
|
|
this._current = null;
|
|
|
|
this._current = null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let data = this._getDataItems(obj);
|
|
|
|
|
|
|
|
this._items = data.items;
|
|
|
|
|
|
|
|
this._byKeys = data.byKeys;
|
|
|
|
|
|
|
|
/*
|
|
|
|
obj = obj || {};
|
|
|
|
obj = obj || {};
|
|
|
|
let array = Array.isArray(obj) ? obj : this.conf.dataGetter(obj) || [];
|
|
|
|
let array = Array.isArray(obj) ? obj : this.conf.dataGetter(obj) || [];
|
|
|
|
if (!Array.isArray(array))
|
|
|
|
if (!Array.isArray(array))
|
|
|
@ -460,12 +485,63 @@ class Dataset {
|
|
|
|
let key = "key-" + this.getKey(item.data);
|
|
|
|
let key = "key-" + this.getKey(item.data);
|
|
|
|
this._byKeys[key] = item;
|
|
|
|
this._byKeys[key] = item;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
this.onDatasetChange(obj);
|
|
|
|
|
|
|
|
this.setState(!Array.isArray(obj) ? obj.state : state);
|
|
|
|
|
|
|
|
this.onDirtiesChange(this.dirty);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_getDataItems(obj) {
|
|
|
|
|
|
|
|
obj = obj || {};
|
|
|
|
|
|
|
|
let array = Array.isArray(obj) ? obj : this.conf.dataGetter(obj) || [];
|
|
|
|
|
|
|
|
if (!Array.isArray(array))
|
|
|
|
|
|
|
|
throw new Error("The data must be an array");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let _items = array.map(e => new DataItem(e, this._formats)),
|
|
|
|
|
|
|
|
_byKeys = {};
|
|
|
|
|
|
|
|
_items.forEach(item => {
|
|
|
|
|
|
|
|
let key = "key-" + this.getKey(item.data);
|
|
|
|
|
|
|
|
_byKeys[key] = item;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
|
|
items: _items,
|
|
|
|
|
|
|
|
byKeys: _byKeys
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**Adds user data to the Dataset.
|
|
|
|
|
|
|
|
* To get user data from an object, the dataGetter configured is called.
|
|
|
|
|
|
|
|
* After user data is set, the methods
|
|
|
|
|
|
|
|
* <ul> <li>{@link Dataset#onDatasetChange}</li>
|
|
|
|
|
|
|
|
* <li>{@link Dataset#onCurrentChange}</li>
|
|
|
|
|
|
|
|
* <li>{@link Dataset#onSelectionChange}</li>
|
|
|
|
|
|
|
|
* <li>{@link Dataset#onDirtiesChange}</li>
|
|
|
|
|
|
|
|
* </ul>
|
|
|
|
|
|
|
|
* are called back.
|
|
|
|
|
|
|
|
* @param {array|object} obj user data or an object that has user data
|
|
|
|
|
|
|
|
* @returns {Dataset} the Dataset
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
addData(obj) {
|
|
|
|
|
|
|
|
if (this.empty)
|
|
|
|
|
|
|
|
return this.setData(obj);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let state = this.state;
|
|
|
|
|
|
|
|
let data = this._getDataItems(obj);
|
|
|
|
|
|
|
|
this._items = this._items.concat(data.items);
|
|
|
|
|
|
|
|
this._byKeys = {
|
|
|
|
|
|
|
|
...this._byKeys,
|
|
|
|
|
|
|
|
...data.byKeys
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
this.onDatasetChange(obj);
|
|
|
|
this.onDatasetChange(obj);
|
|
|
|
this.setState(!Array.isArray(obj) ? obj.state : state);
|
|
|
|
this.setState(!Array.isArray(obj) ? obj.state : state);
|
|
|
|
this.onDirtiesChange(this.dirty);
|
|
|
|
this.onDirtiesChange(this.dirty);
|
|
|
|
|
|
|
|
|
|
|
|
return this;
|
|
|
|
return this;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**Clears the Dataset's user data.
|
|
|
|
/**Clears the Dataset's user data.
|
|
|
@ -1140,6 +1216,7 @@ class DatasetControl {
|
|
|
|
this.prefix = conf.prefix;
|
|
|
|
this.prefix = conf.prefix;
|
|
|
|
this.prefixName = conf.prefixName;
|
|
|
|
this.prefixName = conf.prefixName;
|
|
|
|
this.infoSize = conf.infoSize;
|
|
|
|
this.infoSize = conf.infoSize;
|
|
|
|
|
|
|
|
this.appendData = conf.appendData;
|
|
|
|
|
|
|
|
|
|
|
|
this.query = {};
|
|
|
|
this.query = {};
|
|
|
|
|
|
|
|
|
|
|
@ -1181,10 +1258,16 @@ class DatasetControl {
|
|
|
|
_load() {
|
|
|
|
_load() {
|
|
|
|
if (!this.query.pageNum)
|
|
|
|
if (!this.query.pageNum)
|
|
|
|
this.query.pageNum = 1;
|
|
|
|
this.query.pageNum = 1;
|
|
|
|
json.get({
|
|
|
|
ajax.get({
|
|
|
|
url:this.urls.load,
|
|
|
|
url:this.urls.load,
|
|
|
|
data:this.query,
|
|
|
|
data:this.query,
|
|
|
|
success:resp => this.setData(resp)
|
|
|
|
success:resp => {
|
|
|
|
|
|
|
|
if (!this.appendData || this.query.pageNum == 1)
|
|
|
|
|
|
|
|
this.setData(resp);
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
this.addData(resp);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1192,6 +1275,10 @@ class DatasetControl {
|
|
|
|
this.dataset.setData(obj);
|
|
|
|
this.dataset.setData(obj);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
addData(obj) {
|
|
|
|
|
|
|
|
this.dataset.addData(obj);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
onDatasetChange(obj) {
|
|
|
|
onDatasetChange(obj) {
|
|
|
|
debug("onDatasetChange", obj);
|
|
|
|
debug("onDatasetChange", obj);
|
|
|
|
}
|
|
|
|
}
|
|
|
|