X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/b37ceabb82336ee82757cd32efe353cfab8ec267..f5240829880f87e0cf581c6a296e436fdef0ef80:/examples/calendar/src/templates/BoxLayoutTemplate.js diff --git a/examples/calendar/src/templates/BoxLayoutTemplate.js b/examples/calendar/src/templates/BoxLayoutTemplate.js new file mode 100644 index 00000000..d4e32259 --- /dev/null +++ b/examples/calendar/src/templates/BoxLayoutTemplate.js @@ -0,0 +1,139 @@ +/*! + * Ext JS Library 3.3.0 + * Copyright(c) 2006-2010 Ext JS, Inc. + * licensing@extjs.com + * http://www.extjs.com/license + */ +/** + * @class Ext.calendar.BoxLayoutTemplate + * @extends Ext.XTemplate + *

This is the template used to render calendar views based on small day boxes within a non-scrolling container (currently + * the {@link Ext.calendar.MonthView MonthView} and the all-day headers for {@link Ext.calendar.DayView DayView} and + * {@link Ext.calendar.WeekView WeekView}. This template is automatically bound to the underlying event store by the + * calendar components and expects records of type {@link Ext.calendar.EventRecord}.

+ * @constructor + * @param {Object} config The config object + */ +Ext.calendar.BoxLayoutTemplate = function(config){ + + Ext.apply(this, config); + + var weekLinkTpl = this.showWeekLinks ? '' : ''; + + Ext.calendar.BoxLayoutTemplate.superclass.constructor.call(this, + '', + '
', + weekLinkTpl, + '', + '', + '', + '', + '', + '', + '', + '', + '
 
', + '', + '', + '', + '', + '', + '', + '', + '', + '
{title}
', + '
', + '
', { + getRowTop: function(i, ln){ + return ((i-1)*(100/ln)); + }, + getRowHeight: function(ln){ + return 100/ln; + } + } + ); +}; + +Ext.extend(Ext.calendar.BoxLayoutTemplate, Ext.XTemplate, { + // private + applyTemplate : function(o){ + + Ext.apply(this, o); + + var w = 0, title = '', first = true, isToday = false, showMonth = false, prevMonth = false, nextMonth = false, + weeks = [[]], + today = new Date().clearTime(), + dt = this.viewStart.clone(), + thisMonth = this.startDate.getMonth(); + + for(; w < this.weekCount || this.weekCount == -1; w++){ + if(dt > this.viewEnd){ + break; + } + weeks[w] = []; + + for(var d = 0; d < this.dayCount; d++){ + isToday = dt.getTime() === today.getTime(); + showMonth = first || (dt.getDate() == 1); + prevMonth = (dt.getMonth() < thisMonth) && this.weekCount == -1; + nextMonth = (dt.getMonth() > thisMonth) && this.weekCount == -1; + + if(dt.getDay() == 1){ + // The ISO week format 'W' is relative to a Monday week start. If we + // make this check on Sunday the week number will be off. + weeks[w].weekNum = this.showWeekNumbers ? dt.format('W') : ' '; + weeks[w].weekLinkId = 'ext-cal-week-'+dt.format('Ymd'); + } + + if(showMonth){ + if(isToday){ + title = this.getTodayText(); + } + else{ + title = dt.format(this.dayCount == 1 ? 'l, F j, Y' : (first ? 'M j, Y' : 'M j')); + } + } + else{ + var dayFmt = (w == 0 && this.showHeader !== true) ? 'D j' : 'j'; + title = isToday ? this.getTodayText() : dt.format(dayFmt); + } + + weeks[w].push({ + title: title, + date: dt.clone(), + titleCls: 'ext-cal-dtitle ' + (isToday ? ' ext-cal-dtitle-today' : '') + + (w==0 ? ' ext-cal-dtitle-first' : '') + + (prevMonth ? ' ext-cal-dtitle-prev' : '') + + (nextMonth ? ' ext-cal-dtitle-next' : ''), + cellCls: 'ext-cal-day ' + (isToday ? ' ext-cal-day-today' : '') + + (d==0 ? ' ext-cal-day-first' : '') + + (prevMonth ? ' ext-cal-day-prev' : '') + + (nextMonth ? ' ext-cal-day-next' : '') + }); + dt = dt.add(Date.DAY, 1); + first = false; + } + } + + return Ext.calendar.BoxLayoutTemplate.superclass.applyTemplate.call(this, { + weeks: weeks + }); + }, + + // private + getTodayText : function(){ + var dt = new Date().format('l, F j, Y'), + todayText = this.showTodayText !== false ? this.todayText : '', + timeText = this.showTime !== false ? ' ' + + new Date().format('g:i a') + '' : '', + separator = todayText.length > 0 || timeText.length > 0 ? ' — ' : ''; + + if(this.dayCount == 1){ + return dt + separator + todayText + timeText; + } + fmt = this.weekCount == 1 ? 'D j' : 'j'; + return todayText.length > 0 ? todayText + timeText : new Date().format(fmt) + timeText; + } +}); + +Ext.calendar.BoxLayoutTemplate.prototype.apply = Ext.calendar.BoxLayoutTemplate.prototype.applyTemplate;