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.
332 lines (280 loc) • 8.51 kB
JavaScript
define([
"dojo/_base/array",
"dojo/_base/declare",
"dojo/_base/event",
"dojo/_base/lang",
"dojo/_base/sniff",
"dojo/_base/fx",
"dojo/dom",
"dojo/dom-class",
"dojo/dom-style",
"dojo/dom-geometry",
"dojo/dom-construct",
"dojo/on",
"dojo/date",
"dojo/date/locale",
"dojo/query",
"./SimpleColumnView",
"dojo/text!./templates/ColumnView.html",
"./ColumnViewSecondarySheet"],
function(
arr,
declare,
event,
lang,
has,
fx,
dom,
domClass,
domStyle,
domGeometry,
domConstruct,
on,
date,
locale,
query,
SimpleColumnView,
template,
ColumnViewSecondarySheet){
return declare("dojox.calendar.ColumnView", SimpleColumnView, {
// summary:
// This class defines a simple column view that also uses a secondary
// sheet to display long or all day events.
// By default an dojox.calendar.ColumnViewSecondarySheet instance is created.
// Set the secondarySheetClass property to define the class to instantiate,
// for example to mix the default class with Mouse, Keyboard or Touch plugins.
templateString: template,
baseClass: "dojoxCalendarColumnView",
// secondarySheetClass: Class
// The secondary sheet class, by default dojox.calendar.ColumnViewSecondarySheet.
secondarySheetClass: ColumnViewSecondarySheet,
// secondarySheetProps: Object
// Secondary sheet constructor parameters.
secondarySheetProps: null,
// headerPadding: Integer
// Padding between the header (composed of the secondary sheet and the column header)
// and the primary sheet.
headerPadding: 3,
_showSecondarySheet: true,
buildRendering: function(){
this.inherited(arguments);
if(this.secondarySheetNode){
var args = lang.mixin({owner: this}, this.secondarySheetProps);
this.secondarySheet = new this.secondarySheetClass(args, this.secondarySheetNode);
this.secondarySheetNode = this.secondarySheet.domNode;
}
},
destroy: function(preserveDom){
if(this.secondarySheet){
this.secondarySheet.destroy(preserveDom);
}
this.inherited(arguments);
},
_setVisibility: function(value){
// tags:
// private
this.inherited(arguments);
if(this.secondarySheet){
this.secondarySheet._setVisibility(value);
}
},
resize: function(changedSize){
// tags:
// private
this.inherited(arguments);
if(this.secondarySheet){
// secondary sheet is sized by CSS
this.secondarySheet.resize();
}
},
invalidateLayout: function(){
// tags:
// private
this._layoutRenderers(this.renderData);
if(this.secondarySheet){
this.secondarySheet._layoutRenderers(this.secondarySheet.renderData);
}
},
onRowHeaderClick: function(e){
// summary:
// Event dispatched when the row header cell of the secondary sheet is clicked.
// tags:
// callback
},
_setSubColumnsAttr: function(value){
var old = this.get("subColumns");
if(old != value){
this._secondaryHeightInvalidated = true;
}
this._set("subColumns", value);
},
refreshRendering: function(recursive){
this.inherited(arguments);
if(this._secondaryHeightInvalidated){
this._secondaryHeightInvalidated = false;
var h = domGeometry.getMarginBox(this.secondarySheetNode).h;
this.resizeSecondarySheet(h);
}
if(recursive && this.secondarySheet){
this.secondarySheet.refreshRendering(true);
}
},
resizeSecondarySheet: function(height){
// summary:
// Resizes the secondary sheet header and relayout the other sub components according this new height.
// Warning: this method is only available for the default template and default CSS.
// height: Integer
// The new height in pixels.
if(this.secondarySheetNode){
var headerH = domGeometry.getMarginBox(this.header).h;
domStyle.set(this.secondarySheetNode, "height", height+"px");
this.secondarySheet._resizeHandler(null, true);
var top = (height + headerH + this.headerPadding);
if(this.subHeader && this.subColumns){
domStyle.set(this.subHeader, "top", top+"px");
top += domGeometry.getMarginBox(this.subHeader).h;
}
domStyle.set(this.scrollContainer, "top", top+"px");
if(this.vScrollBar){
domStyle.set(this.vScrollBar, "top", top+"px");
}
}
},
updateRenderers: function(obj, stateOnly){
this.inherited(arguments);
if(this.secondarySheet){
this.secondarySheet.updateRenderers(obj, stateOnly);
}
},
_setItemsAttr: function(value){
this.inherited(arguments);
if(this.secondarySheet){
this.secondarySheet.set("items", value);
}
},
_setDecorationItemsAttr: function(value){
this.inherited(arguments);
if(this.secondarySheet){
this.secondarySheet.set("decorationItems", value);
}
},
_setStartDateAttr: function(value){
this.inherited(arguments);
if(this.secondarySheet){
this.secondarySheet.set("startDate", value);
}
},
_setColumnCountAttr: function(value){
this.inherited(arguments);
if(this.secondarySheet){
this.secondarySheet.set("columnCount", value);
}
},
_setHorizontalRendererAttr: function(value){
if(this.secondarySheet){
this.secondarySheet.set("horizontalRenderer", value);
}
},
_getHorizontalRendererAttr: function(){
if(this.secondarySheet){
return this.secondarySheet.get("horizontalRenderer");
}
return null;
},
_setHorizontalDecorationRendererAttr: function(value){
this.inherited(arguments);
if(this.secondarySheet){
this.secondarySheet.set("horizontalDecorationRenderer", value);
}
},
_getHorizontalRendererAttr: function(){
if(this.secondarySheet){
return this.secondarySheet.get("horizontalDecorationRenderer");
}
return null;
},
_setExpandRendererAttr: function(value){
if(this.secondarySheet){
this.secondarySheet.set("expandRenderer", value);
}
},
_getExpandRendererAttr: function(){
if(this.secondarySheet){
return this.secondarySheet.get("expandRenderer");
}
return null;
},
_setTextDirAttr: function(value){
this.secondarySheet.set("textDir", value);
this._set("textDir", value);
},
_defaultItemToRendererKindFunc: function(item){
return item.allDay ? null : "vertical"; // String
},
getSecondarySheet: function(){
// summary:
// Returns the secondary sheet
// returns: dojox/calendar/MatrixView
return this.secondarySheet;
},
_onGridTouchStart: function(e){
this.inherited(arguments);
this._doEndItemEditing(this.secondarySheet, "touch");
},
_onGridMouseDown: function(e){
this.inherited(arguments);
this._doEndItemEditing(this.secondarySheet, "mouse");
},
_configureScrollBar: function(renderData){
this.inherited(arguments);
if(this.secondarySheetNode){
var atRight = this.isLeftToRight() ? true : this.scrollBarRTLPosition == "right";
domStyle.set(this.secondarySheetNode, atRight ? "right" : "left", renderData.scrollbarWidth + "px");
domStyle.set(this.secondarySheetNode, atRight ? "left" : "right", "0");
arr.forEach(this.secondarySheet._hScrollNodes, function(elt){
domClass[renderData.hScrollBarEnabled ? "add" : "remove"](elt.parentNode, "dojoxCalendarHorizontalScroll");
}, this);
}
},
_configureHScrollDomNodes: function(styleWidth){
this.inherited(arguments);
if(this.secondarySheet && this.secondarySheet._configureHScrollDomNodes){
this.secondarySheet._configureHScrollDomNodes(styleWidth);
}
},
_setHScrollPosition: function(pos){
this.inherited(arguments);
if(this.secondarySheet){
this.secondarySheet._setHScrollPosition(pos);
}
},
_refreshItemsRendering: function(){
this.inherited(arguments);
if(this.secondarySheet){
var rd = this.secondarySheet.renderData;
this.secondarySheet._computeVisibleItems(rd);
this.secondarySheet._layoutRenderers(rd);
}
},
_layoutRenderers: function(renderData){
if(!this.secondarySheet._domReady){
this.secondarySheet._domReady = true;
this.secondarySheet._layoutRenderers(this.secondarySheet.renderData);
}
this.inherited(arguments);
},
_layoutDecorationRenderers: function(renderData){
if(!this.secondarySheet._decDomReady){
this.secondarySheet._decDomReady = true;
this.secondarySheet._layoutDecorationRenderers(this.secondarySheet.renderData);
}
this.inherited(arguments);
},
invalidateRendering: function(){
if(this.secondarySheet){
this.secondarySheet.invalidateRendering();
}
this.inherited(arguments);
}
});
});