You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.9 KiB
99 lines
2.9 KiB
dojo.provide("dojox.widget.tests.CalendarStackLayout"); |
|
dojo.require("dijit.layout.ContentPane"); |
|
dojo.require("dijit.layout.StackContainer"); |
|
dojo.require("dojox.widget.Calendar"); |
|
dojo.require("dijit._Widget"); |
|
dojo.require("dijit._Container"); |
|
dojo.require("dojo.string"); |
|
|
|
dojo.declare("dojox.widget.tests.CalendarStackLayout", [dijit._Widget, dijit._Container],{ |
|
dateToPane: {}, |
|
startup: function(){ |
|
if(this._started){ |
|
return null; |
|
} |
|
|
|
// Get a list of the stack panes |
|
var kids = this.getChildren(); |
|
var dates = []; |
|
|
|
// Store the dates for each pane |
|
dojo.forEach(kids, dojo.hitch(this, function(childContainer){ |
|
var dateRef = childContainer.domNode.getAttribute("dateref"); |
|
this.dateToPane[dateRef] = childContainer; |
|
|
|
var parts = dateRef.split("-"); |
|
var date = new Date(); |
|
date.setFullYear(parts[0]); |
|
date.setMonth(Number(parts[1]) - 1); |
|
date.setDate(parts[2]); |
|
dates.push(date.getTime()); |
|
})); |
|
|
|
dates.sort(); |
|
var lastDate = new Date(dates[dates.length -1]); |
|
var firstDate = new Date(dates[0]); |
|
|
|
var _this = this; |
|
|
|
function getChildByDate(date){ |
|
return _this.dateToPane[ |
|
date.getFullYear() |
|
+ "-" + dojo.string.pad(String(date.getMonth() + 1), 2) |
|
+ "-" + dojo.string.pad(String(date.getDate()))]; |
|
} |
|
|
|
// Instantiate the calendar, overriding the getClassForDate and isDisabledDate functions |
|
this.calendar = new dojox.widget.Calendar({ |
|
getClassForDate: function(date){ |
|
return getChildByDate(date) ? " hasAppointment" : " noAppointment"; |
|
}, |
|
|
|
isDisabledDate: function(date){ |
|
return getChildByDate(date) ? false : true; |
|
} |
|
}); |
|
|
|
if(this.calendar.attr("value").getTime() > lastDate.getTime()){ |
|
this.calendar.attr("value", lastDate); |
|
}else if(this.calendar.attr("value").getTime() < firstDate.getTime()){ |
|
this.calendar.attr("value", firstDate); |
|
} |
|
|
|
// Instantiate the stack container |
|
this.stack = new dijit.layout.StackContainer(); |
|
dojo.addClass(this.stack.domNode, "calendarStack"); |
|
|
|
//Add the calendar and stack container to this widget |
|
this.addChild(this.calendar); |
|
this.addChild(this.stack); |
|
|
|
// Set up some styles on the calendar and stack container |
|
dojo.style(this.stack.domNode, "width", dojo.style(this.calendar.domNode, "width") + "px"); |
|
|
|
dojo.addClass(this.stack.domNode, "dijitCalendarStackDetails"); |
|
|
|
// Add all the content panes to the stack container |
|
dojo.forEach(kids, dojo.hitch(this,function(childContainer){ |
|
this.stack.addChild(childContainer); |
|
})); |
|
|
|
// Add a listener to the onValueSelected method of the calendar |
|
// to select the correct pane |
|
dojo.connect(this.calendar, "onValueSelected", dojo.hitch(this, function(date){ |
|
var pane = getChildByDate(date); |
|
|
|
if(pane){ |
|
this.stack.selectChild(pane); |
|
} |
|
})); |
|
|
|
// Show the last pane automatically |
|
this.stack.selectChild(kids[kids.length - 1]); |
|
if(!this.stack.started && !this.stack._started){ |
|
this.stack.startup(); |
|
} |
|
return this.inherited(arguments); |
|
|
|
} |
|
}); |