[483] | 1 | dojo.provide("dojox.widget.tests.CalendarStackLayout"); |
---|
| 2 | dojo.require("dijit.layout.ContentPane"); |
---|
| 3 | dojo.require("dijit.layout.StackContainer"); |
---|
| 4 | dojo.require("dojox.widget.Calendar"); |
---|
| 5 | dojo.require("dijit._Widget"); |
---|
| 6 | dojo.require("dijit._Container"); |
---|
| 7 | dojo.require("dojo.string"); |
---|
| 8 | |
---|
| 9 | dojo.declare("dojox.widget.tests.CalendarStackLayout", [dijit._Widget, dijit._Container],{ |
---|
| 10 | dateToPane: {}, |
---|
| 11 | startup: function(){ |
---|
| 12 | if(this._started){ |
---|
| 13 | return null; |
---|
| 14 | } |
---|
| 15 | |
---|
| 16 | // Get a list of the stack panes |
---|
| 17 | var kids = this.getChildren(); |
---|
| 18 | var dates = []; |
---|
| 19 | |
---|
| 20 | // Store the dates for each pane |
---|
| 21 | dojo.forEach(kids, dojo.hitch(this, function(childContainer){ |
---|
| 22 | var dateRef = childContainer.domNode.getAttribute("dateref"); |
---|
| 23 | this.dateToPane[dateRef] = childContainer; |
---|
| 24 | |
---|
| 25 | var parts = dateRef.split("-"); |
---|
| 26 | var date = new Date(); |
---|
| 27 | date.setFullYear(parts[0]); |
---|
| 28 | date.setMonth(Number(parts[1]) - 1); |
---|
| 29 | date.setDate(parts[2]); |
---|
| 30 | dates.push(date.getTime()); |
---|
| 31 | })); |
---|
| 32 | |
---|
| 33 | dates.sort(); |
---|
| 34 | var lastDate = new Date(dates[dates.length -1]); |
---|
| 35 | var firstDate = new Date(dates[0]); |
---|
| 36 | |
---|
| 37 | var _this = this; |
---|
| 38 | |
---|
| 39 | function getChildByDate(date){ |
---|
| 40 | return _this.dateToPane[ |
---|
| 41 | date.getFullYear() |
---|
| 42 | + "-" + dojo.string.pad(String(date.getMonth() + 1), 2) |
---|
| 43 | + "-" + dojo.string.pad(String(date.getDate()))]; |
---|
| 44 | } |
---|
| 45 | |
---|
| 46 | // Instantiate the calendar, overriding the getClassForDate and isDisabledDate functions |
---|
| 47 | this.calendar = new dojox.widget.Calendar({ |
---|
| 48 | getClassForDate: function(date){ |
---|
| 49 | return getChildByDate(date) ? " hasAppointment" : " noAppointment"; |
---|
| 50 | }, |
---|
| 51 | |
---|
| 52 | isDisabledDate: function(date){ |
---|
| 53 | return getChildByDate(date) ? false : true; |
---|
| 54 | } |
---|
| 55 | }); |
---|
| 56 | |
---|
| 57 | if(this.calendar.attr("value").getTime() > lastDate.getTime()){ |
---|
| 58 | this.calendar.attr("value", lastDate); |
---|
| 59 | }else if(this.calendar.attr("value").getTime() < firstDate.getTime()){ |
---|
| 60 | this.calendar.attr("value", firstDate); |
---|
| 61 | } |
---|
| 62 | |
---|
| 63 | // Instantiate the stack container |
---|
| 64 | this.stack = new dijit.layout.StackContainer(); |
---|
| 65 | dojo.addClass(this.stack.domNode, "calendarStack"); |
---|
| 66 | |
---|
| 67 | //Add the calendar and stack container to this widget |
---|
| 68 | this.addChild(this.calendar); |
---|
| 69 | this.addChild(this.stack); |
---|
| 70 | |
---|
| 71 | // Set up some styles on the calendar and stack container |
---|
| 72 | dojo.style(this.stack.domNode, "width", dojo.style(this.calendar.domNode, "width") + "px"); |
---|
| 73 | |
---|
| 74 | dojo.addClass(this.stack.domNode, "dijitCalendarStackDetails"); |
---|
| 75 | |
---|
| 76 | // Add all the content panes to the stack container |
---|
| 77 | dojo.forEach(kids, dojo.hitch(this,function(childContainer){ |
---|
| 78 | this.stack.addChild(childContainer); |
---|
| 79 | })); |
---|
| 80 | |
---|
| 81 | // Add a listener to the onValueSelected method of the calendar |
---|
| 82 | // to select the correct pane |
---|
| 83 | dojo.connect(this.calendar, "onValueSelected", dojo.hitch(this, function(date){ |
---|
| 84 | var pane = getChildByDate(date); |
---|
| 85 | |
---|
| 86 | if(pane){ |
---|
| 87 | this.stack.selectChild(pane); |
---|
| 88 | } |
---|
| 89 | })); |
---|
| 90 | |
---|
| 91 | // Show the last pane automatically |
---|
| 92 | this.stack.selectChild(kids[kids.length - 1]); |
---|
| 93 | if(!this.stack.started && !this.stack._started){ |
---|
| 94 | this.stack.startup(); |
---|
| 95 | } |
---|
| 96 | return this.inherited(arguments); |
---|
| 97 | |
---|
| 98 | } |
---|
| 99 | }); |
---|