dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
193 lines (164 loc) • 6.82 kB
JavaScript
define(["dojo/_base/declare", "dojo/_base/array", "dojo/_base/html", "dojo/_base/lang", "dojo/dom-class",
"dojo/Stateful", "dojo/when"],
function(declare, arr, html, lang, domClass, Stateful, when){
return declare("dojox.calendar.StoreMixin", Stateful, {
// summary:
// This mixin contains the store management.
// store: dojo.store.Store
// The store that contains the events to display.
store: null,
// query: Object
// A query that can be passed to when querying the store.
query: {},
// queryOptions: dojo/store/api/Store.QueryOptions?
// Options to be applied when querying the store.
queryOptions: null,
// startTimeAttr: String
// The attribute of the store item that contains the start time of
// the events represented by this item. Default is "startTime".
startTimeAttr: "startTime",
// endTimeAttr: String
// The attribute of the store item that contains the end time of
// the events represented by this item. Default is "endTime".
endTimeAttr: "endTime",
// summaryAttr: String
// The attribute of the store item that contains the summary of
// the events represented by this item. Default is "summary".
summaryAttr: "summary",
// allDayAttr: String
// The attribute of the store item that contains the all day state of
// the events represented by this item. Default is "allDay".
allDayAttr: "allDay",
// subColumnAttr: String
// The attribute of the store item that contains the sub column name of
// the events represented by this item. Default is "calendar".
subColumnAttr: "calendar",
// cssClassFunc: Function
// Optional function that returns a css class name to apply to item renderers that are displaying the specified item in parameter.
cssClassFunc: null,
// decodeDate: Function?
// An optional function to transform store date into Date objects. Default is null.
decodeDate: null,
// encodeDate: Function?
// An optional function to transform Date objects into store date. Default is null.
encodeDate: null,
// displayedItemsInvalidated: Boolean
// Whether the data items displayed must be recomputed, usually after the displayed
// time range has changed.
// tags:
// protected
displayedItemsInvalidated: false,
itemToRenderItem: function(item, store){
// summary:
// Creates the render item based on the dojo.store item. It must be of the form:
// | {
// | id: Object,
// | startTime: Date,
// | endTime: Date,
// | summary: String
// | }
// By default it is building an object using the store id, the summaryAttr,
// startTimeAttr and endTimeAttr properties as well as decodeDate property if not null.
// Other fields or way to query fields can be used if needed.
// item: Object
// The store item.
// store: dojo.store.api.Store
// The store.
// returns: Object
if(this.owner){
return this.owner.itemToRenderItem(item, store);
}
return {
id: store.getIdentity(item),
summary: item[this.summaryAttr],
startTime: (this.decodeDate && this.decodeDate(item[this.startTimeAttr])) || this.newDate(item[this.startTimeAttr], this.dateClassObj),
endTime: (this.decodeDate && this.decodeDate(item[this.endTimeAttr])) || this.newDate(item[this.endTimeAttr], this.dateClassObj),
allDay: item[this.allDayAttr] != null ? item[this.allDayAttr] : false,
subColumn: item[this.subColumnAttr],
cssClass: this.cssClassFunc ? this.cssClassFunc(item) : null
};
},
renderItemToItem: function(/*Object*/ renderItem, /*dojo.store.api.Store*/ store){
// summary:
// Create a store item based on the render item. It must be of the form:
// | {
// | id: Object
// | startTime: Date,
// | endTime: Date,
// | summary: String
// | }
// By default it is building an object using the summaryAttr, startTimeAttr and endTimeAttr properties
// and encodeDate property if not null. If the encodeDate property is null a Date object will be set in the start and end time.
// When using a JsonRest store, for example, it is recommended to transfer dates using the ISO format (see dojo.date.stamp).
// In that case, provide a custom function to the encodeDate property that is using the date ISO encoding provided by Dojo.
// renderItem: Object
// The render item.
// store: dojo.store.api.Store
// The store.
// returns:Object
if(this.owner){
return this.owner.renderItemToItem(renderItem, store);
}
var item = {};
item[store.idProperty] = renderItem.id;
item[this.summaryAttr] = renderItem.summary;
item[this.startTimeAttr] = (this.encodeDate && this.encodeDate(renderItem.startTime)) || renderItem.startTime;
item[this.endTimeAttr] = (this.encodeDate && this.encodeDate(renderItem.endTime)) || renderItem.endTime;
if(renderItem.subColumn){
item[this.subColumnAttr] = renderItem.subColumn;
}
return this.getItemStoreState(renderItem) === "unstored" ? item : lang.mixin(renderItem._item, item);
},
_computeVisibleItems: function(renderData){
// summary:
// Computes the data items that are in the displayed interval.
// renderData: Object
// The renderData that contains the start and end time of the displayed interval.
// tags:
// protected
if(this.owner){
return this.owner._computeVisibleItems(renderData);
}
renderData.items = this.storeManager._computeVisibleItems(renderData);
},
_initItems: function(items){
// tags:
// private
this.set("items", items);
return items;
},
_refreshItemsRendering: function(renderData){
},
_setStoreAttr: function(value){
this.store = value;
return this.storeManager.set("store", value);
},
_getItemStoreStateObj: function(/*Object*/item){
// tags
// private
return this.storeManager._getItemStoreStateObj(item);
},
getItemStoreState: function(item){
// summary:
// Returns the creation state of an item.
// This state is changing during the interactive creation of an item.
// Valid values are:
// - "unstored": The event is being interactively created. It is not in the store yet.
// - "storing": The creation gesture has ended, the event is being added to the store.
// - "stored": The event is not in the two previous states, and is assumed to be in the store
// (not checking because of performance reasons, use store API for testing existence in store).
// item: Object
// The item.
// returns: String
return this.storeManager.getItemStoreState(item);
},
_cleanItemStoreState: function(id){
this.storeManager._cleanItemStoreState(id);
},
_setItemStoreState: function(/*Object*/item, /*String*/state){
// tags
// private
this.storeManager._setItemStoreState(item, state);
}
});
});