private void RenderEvent(HtmlTextWriter output, Event e, Day d) { string displayText = e.Name + " (" + e.Start.ToShortTimeString() + " - " + e.End.ToShortTimeString() + ")"; BeforeEventRenderEventArgs ea = new BeforeEventRenderEventArgs(e); ea.InnerHTML = displayText; ea.ToolTip = displayText; ea.EventClickEnabled = EventClickHandling != EventClickHandlingEnum.Disabled; if (!CssOnly) { ea.DurationBarColor = ColorTranslator.ToHtml(DurationBarColor); ea.BackgroundColor = ColorTranslator.ToHtml(EventBackColor); } DoBeforeEventRender(ea); // real box dimensions and position DateTime dayVisibleStart = new DateTime(d.Start.Year, d.Start.Month, d.Start.Day, VisibleStart.Hour, 0, 0); DateTime realBoxStart = e.BoxStart < dayVisibleStart ? dayVisibleStart : e.BoxStart; DateTime dayVisibleEnd; if (VisibleEnd.Day == 1) { dayVisibleEnd = new DateTime(d.Start.Year, d.Start.Month, d.Start.Day, VisibleEnd.Hour, 0, 0); } else if (VisibleEnd.Day == 2) { dayVisibleEnd = new DateTime(d.Start.Year, d.Start.Month, d.Start.Day, VisibleEnd.Hour, 0, 0).AddDays(1); } else { throw new Exception("Unexpected time for dayVisibleEnd."); } DateTime realBoxEnd = e.BoxEnd > dayVisibleEnd ? dayVisibleEnd : e.BoxEnd; // top double top = (realBoxStart - dayVisibleStart).TotalHours * (CellHeight * 2) + 1; if (ShowHeader) { top += HeaderHeight; } // height double height = (realBoxEnd - realBoxStart).TotalHours * (CellHeight * 2) - 2; int startDelta = (int)Math.Floor((e.Start - realBoxStart).TotalHours * (CellHeight * 2)); int endDelta = (int)Math.Floor((realBoxEnd - e.End).TotalHours * (CellHeight * 2)); double barHeight = height - startDelta - endDelta; int barTop = startDelta; // It's outside of visible area (for NonBusinessHours set to Hide). // Don't draw it in that case. if (height <= 0) { return; } if (CssOnly) { output.AddStyleAttribute("-moz-user-select", "none"); // prevent text selection in FF output.AddStyleAttribute("-khtml-user-select", "none"); // prevent text selection output.AddStyleAttribute("-webkit-user-select", "none"); // prevent text selection output.AddStyleAttribute("user-select", "none"); // prevent text selection output.AddAttribute("unselectable", "on"); output.AddStyleAttribute("position", "absolute"); output.AddStyleAttribute("left", e.Column.StartsAtPct + "%"); output.AddStyleAttribute("top", top + "px"); output.AddStyleAttribute("width", e.Column.WidthPct + "%"); output.AddStyleAttribute("height", (realBoxEnd - realBoxStart).TotalHours * (CellHeight * 2) + "px"); output.AddAttribute("class", PrefixCssClass("_event")); if (ea.EventClickEnabled && EventClickHandling != EventClickHandlingEnum.Disabled) { if (EventClickHandling == EventClickHandlingEnum.PostBack) { output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + Page.ClientScript.GetPostBackEventReference(this, "PK:" + e.PK)); } else { output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + String.Format(EventClickJavaScript, e.PK)); } } output.AddAttribute("onmouseover", "this.className+=' " + PrefixCssClass("_event_hover") + "';event.cancelBubble=true;"); output.AddAttribute("onmouseout", "if (this.className) { this.className = this.className.replace(' " + PrefixCssClass("_event_hover") + "', ''); } ;event.cancelBubble=true;"); output.RenderBeginTag("div"); // inner output.AddAttribute("class", PrefixCssClass("_event_inner")); output.AddAttribute("unselectable", "on"); output.RenderBeginTag("div"); output.Write(ea.InnerHTML); output.RenderEndTag(); // bar output.AddAttribute("class", PrefixCssClass("_event_bar")); output.AddStyleAttribute("position", "absolute"); output.RenderBeginTag("div"); double barTopPct = (100.0*barTop/height); double barHeightPct = (100.0*barHeight/height); if (barTopPct + barHeightPct > 100) { barHeightPct = 100 - barTopPct; } // bar_inner output.AddAttribute("class", PrefixCssClass("_event_bar_inner")); output.AddStyleAttribute("top", barTopPct + "%"); output.AddStyleAttribute("height", barHeightPct + "%"); output.RenderBeginTag("div"); // bar_inner output.RenderEndTag(); // bar output.RenderEndTag(); output.RenderEndTag(); } else { // MAIN BOX output.AddAttribute("onselectstart", "return false;"); // prevent text selection in IE if (ea.EventClickEnabled && EventClickHandling != EventClickHandlingEnum.Disabled) { if (EventClickHandling == EventClickHandlingEnum.PostBack) { output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + Page.ClientScript.GetPostBackEventReference(this, "PK:" + e.PK)); } else { output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + String.Format(EventClickJavaScript, e.PK)); } output.AddStyleAttribute("cursor", "pointer"); } output.AddStyleAttribute("-moz-user-select", "none"); // prevent text selection in FF output.AddStyleAttribute("-khtml-user-select", "none"); // prevent text selection output.AddStyleAttribute("user-select", "none"); // prevent text selection output.AddStyleAttribute("position", "absolute"); if (!CssOnly) { output.AddStyleAttribute("font-family", EventFontFamily); output.AddStyleAttribute("font-size", EventFontSize); output.AddStyleAttribute("white-space", "no-wrap"); output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(EventBorderColor)); } output.AddStyleAttribute("left", e.Column.StartsAtPct + "%"); output.AddStyleAttribute("top", top + "px"); output.AddStyleAttribute("width", e.Column.WidthPct + "%"); output.AddStyleAttribute("height", (realBoxEnd - realBoxStart).TotalHours * (CellHeight * 2) + "px"); output.RenderBeginTag("div"); // FIX BOX - to fix the outer/inner box differences in Mozilla/IE (to create border) if (ea.EventClickEnabled && EventClickHandling != EventClickHandlingEnum.Disabled) { if (!CssOnly) { output.AddAttribute("onmouseover", "this.style.backgroundColor='" + ColorTranslator.ToHtml(EventHoverColor) + "';event.cancelBubble=true;"); output.AddAttribute("onmouseout", "this.style.backgroundColor='" + ea.BackgroundColor + "';event.cancelBubble=true;"); } } if (ShowToolTip) { output.AddAttribute("title", ea.ToolTip); } output.AddStyleAttribute("margin-top", "1px"); output.AddStyleAttribute("display", "block"); output.AddStyleAttribute("height", height + "px"); if (!CssOnly) { output.AddStyleAttribute("background-color", ea.BackgroundColor); output.AddStyleAttribute("border-left", "1px solid " + ColorTranslator.ToHtml(EventBorderColor)); output.AddStyleAttribute("border-right", "1px solid " + ColorTranslator.ToHtml(EventBorderColor)); } output.AddStyleAttribute("overflow", "hidden"); output.RenderBeginTag("div"); // blue column if (e.Start > realBoxStart) { } output.AddStyleAttribute("float", "left"); output.AddStyleAttribute("width", "5px"); output.AddStyleAttribute("height", height - startDelta - endDelta + "px"); output.AddStyleAttribute("margin-top", startDelta + "px"); if (!CssOnly) { output.AddStyleAttribute("background-color", ea.DurationBarColor); output.AddStyleAttribute("font-size", "1px"); } output.RenderBeginTag("div"); output.RenderEndTag(); // right border of blue column output.AddStyleAttribute("float", "left"); output.AddStyleAttribute("width", "1px"); if (!CssOnly) { output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(EventBorderColor)); } output.AddStyleAttribute("height", "100%"); output.RenderBeginTag("div"); output.RenderEndTag(); // space output.AddStyleAttribute("float", "left"); output.AddStyleAttribute("width", "2px"); output.AddStyleAttribute("height", "100%"); output.RenderBeginTag("div"); output.RenderEndTag(); // PADDING BOX output.AddStyleAttribute("padding", "1px"); output.RenderBeginTag("div"); output.Write(ea.InnerHTML); // closing the PADDING BOX output.RenderEndTag(); // closing the FIX BOX output.RenderEndTag(); // closing the MAIN BOX output.RenderEndTag(); } }
private void DoBeforeEventRender(BeforeEventRenderEventArgs args) { if (BeforeEventRender != null) { BeforeEventRender(this, args); } }