X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/b37ceabb82336ee82757cd32efe353cfab8ec267..f5240829880f87e0cf581c6a296e436fdef0ef80:/examples/docs/source/MonthView.html diff --git a/examples/docs/source/MonthView.html b/examples/docs/source/MonthView.html new file mode 100644 index 00000000..1108d108 --- /dev/null +++ b/examples/docs/source/MonthView.html @@ -0,0 +1,493 @@ + + + + The source code + + + + +
/*!
+ * Ext JS Library 3.3.0
+ * Copyright(c) 2006-2010 Ext JS, Inc.
+ * licensing@extjs.com
+ * http://www.extjs.com/license
+ */
+
/** + * @class Ext.calendar.MonthView + * @extends Ext.calendar.CalendarView + *

Displays a calendar view by month. This class does not usually need ot be used directly as you can + * use a {@link Ext.calendar.CalendarPanel CalendarPanel} to manage multiple calendar views at once including + * the month view.

+ * @constructor + * @param {Object} config The config object + */ +Ext.calendar.MonthView = Ext.extend(Ext.calendar.CalendarView, { +
/** + * @cfg {Boolean} showTime + * True to display the current time in today's box in the calendar, false to not display it (defautls to true) + */ + showTime: true, +
/** + * @cfg {Boolean} showTodayText + * True to display the {@link #todayText} string in today's box in the calendar, false to not display it (defautls to true) + */ + showTodayText: true, +
/** + * @cfg {String} todayText + * The text to display in the current day's box in the calendar when {@link #showTodayText} is true (defaults to 'Today') + */ + todayText: 'Today', +
/** + * @cfg {Boolean} showHeader + * True to display a header beneath the navigation bar containing the week names above each week's column, false not to + * show it and instead display the week names in the first row of days in the calendar (defaults to false). + */ + showHeader: false, + /** + * @cfg {Boolean} showWeekLinks + * True to display an extra column before the first day in the calendar that links to the {@link Ext.calendar.WeekView view} + * for each individual week, false to not show it (defaults to false). If true, the week links can also contain the week + * number depending on the value of {@link #showWeekNumbers}. + */ + showWeekLinks: false, +
/** + * @cfg {Boolean} showWeekNumbers + * True to show the week number for each week in the calendar in the week link column, false to show nothing (defaults to false). + * Note that if {@link #showWeekLinks} is false this config will have no affect even if true. + */ + showWeekNumbers: false, +
/** + * @cfg {String} weekLinkOverClass + * The CSS class name applied when the mouse moves over a week link element (only applies when {@link #showWeekLinks} is true, + * defaults to 'ext-week-link-over'). + */ + weekLinkOverClass: 'ext-week-link-over', + + //private properties -- do not override: + daySelector: '.ext-cal-day', + moreSelector: '.ext-cal-ev-more', + weekLinkSelector: '.ext-cal-week-link', + weekCount: -1, + // defaults to auto by month + dayCount: 7, + moreElIdDelimiter: '-more-', + weekLinkIdDelimiter: 'ext-cal-week-', + + // private + initComponent: function() { + Ext.calendar.MonthView.superclass.initComponent.call(this); + this.addEvents({ +
/** + * @event dayclick + * Fires after the user clicks within the view container and not on an event element + * @param {Ext.calendar.MonthView} this + * @param {Date} dt The date/time that was clicked on + * @param {Boolean} allday True if the day clicked on represents an all-day box, else false. Clicks within the + * MonthView always return true for this param. + * @param {Ext.Element} el The Element that was clicked on + */ + dayclick: true, +
/** + * @event weekclick + * Fires after the user clicks within a week link (when {@link #showWeekLinks is true) + * @param {Ext.calendar.MonthView} this + * @param {Date} dt The start date of the week that was clicked on + */ + weekclick: true, + // inherited docs + dayover: true, + // inherited docs + dayout: true + }); + }, + + // private + initDD: function() { + var cfg = { + view: this, + createText: this.ddCreateEventText, + moveText: this.ddMoveEventText, + ddGroup: 'MonthViewDD' + }; + + this.dragZone = new Ext.calendar.DragZone(this.el, cfg); + this.dropZone = new Ext.calendar.DropZone(this.el, cfg); + }, + + // private + onDestroy: function() { + Ext.destroy(this.ddSelector); + Ext.destroy(this.dragZone); + Ext.destroy(this.dropZone); + Ext.calendar.MonthView.superclass.onDestroy.call(this); + }, + + // private + afterRender: function() { + if (!this.tpl) { + this.tpl = new Ext.calendar.MonthViewTemplate({ + id: this.id, + showTodayText: this.showTodayText, + todayText: this.todayText, + showTime: this.showTime, + showHeader: this.showHeader, + showWeekLinks: this.showWeekLinks, + showWeekNumbers: this.showWeekNumbers + }); + } + this.tpl.compile(); + this.addClass('ext-cal-monthview ext-cal-ct'); + + Ext.calendar.MonthView.superclass.afterRender.call(this); + }, + + // private + onResize: function() { + if (this.monitorResize) { + this.maxEventsPerDay = this.getMaxEventsPerDay(); + this.refresh(); + } + }, + + // private + forceSize: function() { + // Compensate for the week link gutter width if visible + if (this.showWeekLinks && this.el && this.el.child) { + var hd = this.el.select('.ext-cal-hd-days-tbl'), + bgTbl = this.el.select('.ext-cal-bg-tbl'), + evTbl = this.el.select('.ext-cal-evt-tbl'), + wkLinkW = this.el.child('.ext-cal-week-link').getWidth(), + w = this.el.getWidth() - wkLinkW; + + hd.setWidth(w); + bgTbl.setWidth(w); + evTbl.setWidth(w); + } + Ext.calendar.MonthView.superclass.forceSize.call(this); + }, + + //private + initClock: function() { + if (Ext.fly(this.id + '-clock') !== null) { + this.prevClockDay = new Date().getDay(); + if (this.clockTask) { + Ext.TaskMgr.stop(this.clockTask); + } + this.clockTask = Ext.TaskMgr.start({ + run: function() { + var el = Ext.fly(this.id + '-clock'), + t = new Date(); + + if (t.getDay() == this.prevClockDay) { + if (el) { + el.update(t.format('g:i a')); + } + } + else { + this.prevClockDay = t.getDay(); + this.moveTo(t); + } + }, + scope: this, + interval: 1000 + }); + } + }, + + // inherited docs + getEventBodyMarkup: function() { + if (!this.eventBodyMarkup) { + this.eventBodyMarkup = ['{Title}', + '', + ' ', + '', + '', + ' ', + '', + '', + ' ', + '', + '', + ' ', + '' + ].join(''); + } + return this.eventBodyMarkup; + }, + + // inherited docs + getEventTemplate: function() { + if (!this.eventTpl) { + var tpl, + body = this.getEventBodyMarkup(); + + tpl = !(Ext.isIE || Ext.isOpera) ? + new Ext.XTemplate( + '
', + body, + '
' + ) + : new Ext.XTemplate( + '', + '
', + '
', + '
', + '', + '', + '
', + '', + body, + '', + '
', + '
', + '', + '
' + ); + tpl.compile(); + this.eventTpl = tpl; + } + return this.eventTpl; + }, + + // private + getTemplateEventData: function(evt) { + var M = Ext.calendar.EventMappings, + selector = this.getEventSelectorCls(evt[M.EventId.name]), + title = evt[M.Title.name]; + + return Ext.applyIf({ + _selectorCls: selector, + _colorCls: 'ext-color-' + (evt[M.CalendarId.name] ? + evt[M.CalendarId.name] : 'default') + (evt._renderAsAllDay ? '-ad': ''), + _elId: selector + '-' + evt._weekIndex, + _isRecurring: evt.Recurrence && evt.Recurrence != '', + _isReminder: evt[M.Reminder.name] && evt[M.Reminder.name] != '', + Title: (evt[M.IsAllDay.name] ? '': evt[M.StartDate.name].format('g:ia ')) + (!title || title.length == 0 ? '(No title)': title) + }, + evt); + }, + + // private + refresh: function() { + if (this.detailPanel) { + this.detailPanel.hide(); + } + Ext.calendar.MonthView.superclass.refresh.call(this); + + if (this.showTime !== false) { + this.initClock(); + } + }, + + // private + renderItems: function() { + Ext.calendar.WeekEventRenderer.render({ + eventGrid: this.allDayOnly ? this.allDayGrid: this.eventGrid, + viewStart: this.viewStart, + tpl: this.getEventTemplate(), + maxEventsPerDay: this.maxEventsPerDay, + id: this.id, + templateDataFn: this.getTemplateEventData.createDelegate(this), + evtMaxCount: this.evtMaxCount, + weekCount: this.weekCount, + dayCount: this.dayCount + }); + this.fireEvent('eventsrendered', this); + }, + + // private + getDayEl: function(dt) { + return Ext.get(this.getDayId(dt)); + }, + + // private + getDayId: function(dt) { + if (Ext.isDate(dt)) { + dt = dt.format('Ymd'); + } + return this.id + this.dayElIdDelimiter + dt; + }, + + // private + getWeekIndex: function(dt) { + var el = this.getDayEl(dt).up('.ext-cal-wk-ct'); + return parseInt(el.id.split('-wk-')[1], 10); + }, + + // private + getDaySize: function(contentOnly) { + var box = this.el.getBox(), + w = box.width / this.dayCount, + h = box.height / this.getWeekCount(); + + if (contentOnly) { + var hd = this.el.select('.ext-cal-dtitle').first().parent('tr'); + h = hd ? h - hd.getHeight(true) : h; + } + return { + height: h, + width: w + }; + }, + + // private + getEventHeight: function() { + if (!this.eventHeight) { + var evt = this.el.select('.ext-cal-evt').first(); + this.eventHeight = evt ? evt.parent('tr').getHeight() : 18; + } + return this.eventHeight; + }, + + // private + getMaxEventsPerDay: function() { + var dayHeight = this.getDaySize(true).height, + h = this.getEventHeight(), + max = Math.max(Math.floor((dayHeight - h) / h), 0); + + return max; + }, + + // private + getDayAt: function(x, y) { + var box = this.el.getBox(), + daySize = this.getDaySize(), + dayL = Math.floor(((x - box.x) / daySize.width)), + dayT = Math.floor(((y - box.y) / daySize.height)), + days = (dayT * 7) + dayL, + dt = this.viewStart.add(Date.DAY, days); + return { + date: dt, + el: this.getDayEl(dt) + }; + }, + + // inherited docs + moveNext: function() { + return this.moveMonths(1); + }, + + // inherited docs + movePrev: function() { + return this.moveMonths( - 1); + }, + + // private + onInitDrag: function() { + Ext.calendar.MonthView.superclass.onInitDrag.call(this); + Ext.select(this.daySelector).removeClass(this.dayOverClass); + if (this.detailPanel) { + this.detailPanel.hide(); + } + }, + + // private + onMoreClick: function(dt) { + if (!this.detailPanel) { + this.detailPanel = new Ext.Panel({ + id: this.id + '-details-panel', + title: dt.format('F j'), + layout: 'fit', + floating: true, + renderTo: Ext.getBody(), + tools: [{ + id: 'close', + handler: function(e, t, p) { + p.hide(); + } + }], + items: { + xtype: 'monthdaydetailview', + id: this.id + '-details-view', + date: dt, + view: this, + store: this.store, + listeners: { + 'eventsrendered': this.onDetailViewUpdated.createDelegate(this) + } + } + }); + } + else { + this.detailPanel.setTitle(dt.format('F j')); + } + this.detailPanel.getComponent(this.id + '-details-view').update(dt); + }, + + // private + onDetailViewUpdated: function(view, dt, numEvents) { + var p = this.detailPanel, + frameH = p.getFrameHeight(), + evtH = this.getEventHeight(), + bodyH = frameH + (numEvents * evtH) + 3, + dayEl = this.getDayEl(dt), + box = dayEl.getBox(); + + p.updateBox(box); + p.setHeight(bodyH); + p.setWidth(Math.max(box.width, 220)); + p.show(); + p.getPositionEl().alignTo(dayEl, 't-t?'); + }, + + // private + onHide: function() { + Ext.calendar.MonthView.superclass.onHide.call(this); + if (this.detailPanel) { + this.detailPanel.hide(); + } + }, + + // private + onClick: function(e, t) { + if (this.detailPanel) { + this.detailPanel.hide(); + } + if (Ext.calendar.MonthView.superclass.onClick.apply(this, arguments)) { + // The superclass handled the click already so exit + return; + } + if (this.dropZone) { + this.dropZone.clearShims(); + } + var el = e.getTarget(this.weekLinkSelector, 3), + dt, + parts; + if (el) { + dt = el.id.split(this.weekLinkIdDelimiter)[1]; + this.fireEvent('weekclick', this, Date.parseDate(dt, 'Ymd')); + return; + } + el = e.getTarget(this.moreSelector, 3); + if (el) { + dt = el.id.split(this.moreElIdDelimiter)[1]; + this.onMoreClick(Date.parseDate(dt, 'Ymd')); + return; + } + el = e.getTarget('td', 3); + if (el) { + if (el.id && el.id.indexOf(this.dayElIdDelimiter) > -1) { + parts = el.id.split(this.dayElIdDelimiter); + dt = parts[parts.length - 1]; + + this.fireEvent('dayclick', this, Date.parseDate(dt, 'Ymd'), false, Ext.get(this.getDayId(dt))); + return; + } + } + }, + + // private + handleDayMouseEvent: function(e, t, type) { + var el = e.getTarget(this.weekLinkSelector, 3, true); + if (el) { + el[type == 'over' ? 'addClass': 'removeClass'](this.weekLinkOverClass); + return; + } + Ext.calendar.MonthView.superclass.handleDayMouseEvent.apply(this, arguments); + } +}); + +Ext.reg('monthview', Ext.calendar.MonthView); +
+ + \ No newline at end of file