/// <devdoc> /// </devdoc> private void RenderVerticalRepeater(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl) { int itemCount = user.RepeatedItemCount; int totalColumns; int totalRows; int filledColumns; // List Layout Constraint --> Columns = 0 or 1 if ((repeatColumns == 0) || (repeatColumns == 1)) { // A RepeatColumns of 0 implies a completely vertical repetition in // a single column. This is same as repeatColumns of 1. totalColumns = 1; filledColumns = 1; totalRows = itemCount; } else { totalColumns = repeatColumns; totalRows = (int)((itemCount + repeatColumns - 1) / repeatColumns); if ((totalRows == 0) && (itemCount != 0)) { // if repeatColumns is a huge number like Int32.MaxValue, then the // calculation above essentially reduces down to 0 totalRows = 1; } filledColumns = itemCount % totalColumns; if (filledColumns == 0) { filledColumns = totalColumns; } } WebControl outerControl = null; bool tableLayout = false; // List Layout Constraint --> OuterTableImplied = false // List Layout Constraint --> tableLayout = false if (!outerTableImplied) { switch (repeatLayout) { case RepeatLayout.Table: outerControl = new Table(); if (Caption.Length != 0) { ((Table)outerControl).Caption = Caption; ((Table)outerControl).CaptionAlign = CaptionAlign; } tableLayout = true; break; case RepeatLayout.Flow: outerControl = new WebControl(HtmlTextWriterTag.Span); break; case RepeatLayout.UnorderedList: outerControl = new WebControl(HtmlTextWriterTag.Ul); break; case RepeatLayout.OrderedList: outerControl = new WebControl(HtmlTextWriterTag.Ol); break; } } bool separators = user.HasSeparators; // List Layout Constraint --> separators = false if (outerControl != null) { // use ClientID (and not ID) since we want to render out the fully qualified client id // even though this outer control will not be parented to the control hierarchy outerControl.ID = baseControl.ClientID; outerControl.CopyBaseAttributes(baseControl); outerControl.ApplyStyle(controlStyle); outerControl.RenderBeginTag(writer); } // List Layout Constraint --> HasHeader = false if (user.HasHeader) { if (tableLayout) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); // add attributes to render for TH if (totalColumns != 1) { int columnSpan = totalColumns; if (separators) columnSpan += totalColumns; writer.AddAttribute(HtmlTextWriterAttribute.Colspan, columnSpan.ToString(NumberFormatInfo.InvariantInfo)); } if (useAccessibleHeader) { writer.AddAttribute(HtmlTextWriterAttribute.Scope, "col"); } // add style attributes to render for TD/TH Style style = user.GetItemStyle(ListItemType.Header, -1); if (style != null) { style.AddAttributesToRender(writer); } // render begin tag for TD/TH if (useAccessibleHeader) { writer.RenderBeginTag(HtmlTextWriterTag.Th); } else { writer.RenderBeginTag(HtmlTextWriterTag.Td); } } user.RenderItem(ListItemType.Header, -1, this, writer); if (tableLayout) { // render end tags TD/TH and TR writer.RenderEndTag(); writer.RenderEndTag(); } else if (!outerTableImplied) { if (EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } int itemCounter = 0; for (int currentRow = 0; currentRow < totalRows; currentRow++) { // List Layout Constraint --> tableLayout = false if (tableLayout) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); } int itemIndex = currentRow; for (int currentCol = 0; currentCol < totalColumns; currentCol++) { if (itemCounter >= itemCount) { // done rendering all items, so break out of the loop now... // we might end up here, in unfilled columns attempting to re-render items that // have already been rendered on the next column in a prior row. break; } if (currentCol != 0) { itemIndex += totalRows; // if the previous column (currentColumn - 1) was not a filled column, i.e., // it had one less item (the maximum possible), then subtract 1 from the item index. if ((currentCol - 1) >= filledColumns) { itemIndex--; } } if (itemIndex >= itemCount) continue; itemCounter++; // List Layout Constraint --> tableLayout = false if (tableLayout) { // add style attributes to render for TD Style style = user.GetItemStyle(ListItemType.Item, itemIndex); if (style != null) style.AddAttributesToRender(writer); // render begin tag for TD writer.RenderBeginTag(HtmlTextWriterTag.Td); } if (IsListLayout) { writer.RenderBeginTag(HtmlTextWriterTag.Li); } user.RenderItem(ListItemType.Item, itemIndex, this, writer); if (IsListLayout) { writer.RenderEndTag(); writer.WriteLine(); } // List Layout Constraint --> tableLayout = false if (tableLayout) { // render end tag for TD writer.RenderEndTag(); } // List Layout Constraint --> separators = false if (separators) { if (itemIndex != (itemCount - 1)) { if (totalColumns == 1) { if (tableLayout) { writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Tr); } else { if (!outerTableImplied) { if (EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } } if (tableLayout) { Style style = user.GetItemStyle(ListItemType.Separator, itemIndex); if (style != null) style.AddAttributesToRender(writer); writer.RenderBeginTag(HtmlTextWriterTag.Td); } if (itemIndex < itemCount) user.RenderItem(ListItemType.Separator, itemIndex, this, writer); if (tableLayout) writer.RenderEndTag(); } else { // if we're on the last filled line and separators are specified, add another <td/> // to accomodate for the lack of a separator on the last item. If there's only one // column, though, separators will get their own row anyways. if (tableLayout && totalColumns > 1) { writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.RenderEndTag(); } } } } // on the last line, fill in the remaining empty slots with <td/>s. We need twice as many // if there were separators. // List Layout Constraint --> tableLayout = false if (tableLayout) { if (currentRow == totalRows - 1) { int unfilledColumns = totalColumns - filledColumns; if (separators) { int unfilledColumnsWithSeparators = unfilledColumns * 2; if (unfilledColumnsWithSeparators >= unfilledColumns) { unfilledColumns = unfilledColumnsWithSeparators; } } if (unfilledColumns != 0) { for (int i = 0; i < unfilledColumns; i++) { writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.RenderEndTag(); } } } writer.RenderEndTag(); } else { if (((currentRow != totalRows - 1) || user.HasFooter) && (!outerTableImplied) && (!IsListLayout)) { if (EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } } // List Layout Constraint --> HasFooter = false if (user.HasFooter) { if (tableLayout) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); // add attributes to render for TD if (totalColumns != 1) { int columnSpan = totalColumns; if (separators) columnSpan += totalColumns; writer.AddAttribute(HtmlTextWriterAttribute.Colspan, columnSpan.ToString(NumberFormatInfo.InvariantInfo)); } // add style attributes to render for TD Style style = user.GetItemStyle(ListItemType.Footer, -1); if (style != null) style.AddAttributesToRender(writer); // render begin tag for TD writer.RenderBeginTag(HtmlTextWriterTag.Td); } user.RenderItem(ListItemType.Footer, -1, this, writer); if (tableLayout) { // render end tag for TR and TD writer.RenderEndTag(); writer.RenderEndTag(); } } if (outerControl != null) outerControl.RenderEndTag(writer); }
/// <devdoc> /// </devdoc> private void RenderHorizontalRepeater(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl) { Debug.Assert(outerTableImplied == false, "Cannot use outer implied table with Horizontal layout"); int itemCount = user.RepeatedItemCount; int totalColumns = repeatColumns; int currentColumn = 0; if (totalColumns == 0) { // 0 implies a complete horizontal repetition without any // column count constraints totalColumns = itemCount; } WebControl outerControl = null; bool tableLayout = false; switch (repeatLayout) { case RepeatLayout.Table: outerControl = new Table(); if (Caption.Length != 0) { ((Table)outerControl).Caption = Caption; ((Table)outerControl).CaptionAlign = CaptionAlign; } tableLayout = true; break; case RepeatLayout.Flow: outerControl = new WebControl(HtmlTextWriterTag.Span); break; } bool separators = user.HasSeparators; // use ClientID (and not ID) since we want to render out the fully qualified client id // even though this outer control will not be parented to the control hierarchy outerControl.ID = baseControl.ClientID; outerControl.CopyBaseAttributes(baseControl); outerControl.ApplyStyle(controlStyle); outerControl.RenderBeginTag(writer); if (user.HasHeader) { if (tableLayout) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); // add attributes to render for TD/TH if ((totalColumns != 1) || separators) { int columnSpan = totalColumns; if (separators) columnSpan += totalColumns; writer.AddAttribute(HtmlTextWriterAttribute.Colspan, columnSpan.ToString(NumberFormatInfo.InvariantInfo)); } if (useAccessibleHeader) { writer.AddAttribute(HtmlTextWriterAttribute.Scope, "col"); } // add style attributes to render for TD/TH Style style = user.GetItemStyle(ListItemType.Header, -1); if (style != null) { style.AddAttributesToRender(writer); } // render begin tag if (useAccessibleHeader) { writer.RenderBeginTag(HtmlTextWriterTag.Th); } else { writer.RenderBeginTag(HtmlTextWriterTag.Td); } } user.RenderItem(ListItemType.Header, -1, this, writer); if (tableLayout) { // render end tags TD/TH and TR writer.RenderEndTag(); writer.RenderEndTag(); } else { if (totalColumns < itemCount) { // we have multiple rows, so have a break between the header and first row. if (EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } } for (int i = 0; i < itemCount; i++) { if (tableLayout && (currentColumn == 0)) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); } if (tableLayout) { // add style attributes to render for TD Style style = user.GetItemStyle(ListItemType.Item, i); if (style != null) style.AddAttributesToRender(writer); // render begin tag for TD writer.RenderBeginTag(HtmlTextWriterTag.Td); } user.RenderItem(ListItemType.Item, i, this, writer); if (tableLayout) { // render end tag for TD writer.RenderEndTag(); } if (separators && (i != (itemCount - 1))) { if (tableLayout) { Style style = user.GetItemStyle(ListItemType.Separator, i); if (style != null) style.AddAttributesToRender(writer); writer.RenderBeginTag(HtmlTextWriterTag.Td); } user.RenderItem(ListItemType.Separator, i, this, writer); if (tableLayout) writer.RenderEndTag(); } currentColumn++; // on the last line, fill in the rest of the empty spots with <td/>s. // If there were separators, we need twice as many plus one to accomodate for // the last item not having a separator after it. if (tableLayout && i == itemCount - 1) { int unfilledColumns = totalColumns - currentColumn; if (separators == true) { int unfilledColumnsWithSeparators = (unfilledColumns * 2) + 1; if (unfilledColumnsWithSeparators > unfilledColumns) { unfilledColumns = unfilledColumnsWithSeparators; } } for (int k = 0; k < unfilledColumns; k++) { writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.RenderEndTag(); } } if ((currentColumn == totalColumns) || (i == itemCount - 1)) { if (tableLayout) { // End tag for TR writer.RenderEndTag(); } else { // write out the <br> after rows when there are multiple rows if (totalColumns < itemCount) { if (EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } currentColumn = 0; } } if (user.HasFooter) { if (tableLayout) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); if ((totalColumns != 1) || separators) { // add attributes to render for TD int columnSpan = totalColumns; if (separators) columnSpan += totalColumns; writer.AddAttribute(HtmlTextWriterAttribute.Colspan, columnSpan.ToString(NumberFormatInfo.InvariantInfo)); } // add style attributes to render for TD Style style = user.GetItemStyle(ListItemType.Footer, -1); if (style != null) style.AddAttributesToRender(writer); // render begin tag for TD writer.RenderBeginTag(HtmlTextWriterTag.Td); } user.RenderItem(ListItemType.Footer, -1, this, writer); if (tableLayout) { // render end tag for TR and TD writer.RenderEndTag(); writer.RenderEndTag(); } } outerControl.RenderEndTag(writer); }
private void RenderVerticalRepeater(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl) { int repeatColumns; int num3; int num4; int repeatedItemCount = user.RepeatedItemCount; if ((this.repeatColumns == 0) || (this.repeatColumns == 1)) { repeatColumns = 1; num4 = 1; num3 = repeatedItemCount; } else { repeatColumns = this.repeatColumns; num3 = ((repeatedItemCount + this.repeatColumns) - 1) / this.repeatColumns; if ((num3 == 0) && (repeatedItemCount != 0)) { num3 = 1; } num4 = repeatedItemCount % repeatColumns; if (num4 == 0) { num4 = repeatColumns; } } WebControl control = null; bool flag = false; if (!this.outerTableImplied) { switch (this.repeatLayout) { case System.Web.UI.WebControls.RepeatLayout.Table: control = new Table(); if (this.Caption.Length != 0) { ((Table) control).Caption = this.Caption; ((Table) control).CaptionAlign = this.CaptionAlign; } flag = true; break; case System.Web.UI.WebControls.RepeatLayout.Flow: control = new WebControl(HtmlTextWriterTag.Span); break; case System.Web.UI.WebControls.RepeatLayout.UnorderedList: control = new WebControl(HtmlTextWriterTag.Ul); break; case System.Web.UI.WebControls.RepeatLayout.OrderedList: control = new WebControl(HtmlTextWriterTag.Ol); break; } } bool hasSeparators = user.HasSeparators; if (control != null) { control.ID = baseControl.ClientID; control.CopyBaseAttributes(baseControl); control.ApplyStyle(controlStyle); control.RenderBeginTag(writer); } if (user.HasHeader) { if (flag) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); if (repeatColumns != 1) { int num5 = repeatColumns; if (hasSeparators) { num5 += repeatColumns; } writer.AddAttribute(HtmlTextWriterAttribute.Colspan, num5.ToString(NumberFormatInfo.InvariantInfo)); } if (this.useAccessibleHeader) { writer.AddAttribute(HtmlTextWriterAttribute.Scope, "col"); } Style itemStyle = user.GetItemStyle(ListItemType.Header, -1); if (itemStyle != null) { itemStyle.AddAttributesToRender(writer); } if (this.useAccessibleHeader) { writer.RenderBeginTag(HtmlTextWriterTag.Th); } else { writer.RenderBeginTag(HtmlTextWriterTag.Td); } } user.RenderItem(ListItemType.Header, -1, this, writer); if (flag) { writer.RenderEndTag(); writer.RenderEndTag(); } else if (!this.outerTableImplied) { if (this.EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } int num6 = 0; for (int i = 0; i < num3; i++) { if (flag) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); } int repeatIndex = i; for (int j = 0; j < repeatColumns; j++) { if (num6 >= repeatedItemCount) { break; } if (j != 0) { repeatIndex += num3; if ((j - 1) >= num4) { repeatIndex--; } } if (repeatIndex < repeatedItemCount) { num6++; if (flag) { Style style2 = user.GetItemStyle(ListItemType.Item, repeatIndex); if (style2 != null) { style2.AddAttributesToRender(writer); } writer.RenderBeginTag(HtmlTextWriterTag.Td); } if (this.IsListLayout) { writer.RenderBeginTag(HtmlTextWriterTag.Li); } user.RenderItem(ListItemType.Item, repeatIndex, this, writer); if (this.IsListLayout) { writer.RenderEndTag(); writer.WriteLine(); } if (flag) { writer.RenderEndTag(); } if (hasSeparators) { if (repeatIndex != (repeatedItemCount - 1)) { if (repeatColumns == 1) { if (flag) { writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Tr); } else if (!this.outerTableImplied) { if (this.EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } if (flag) { Style style3 = user.GetItemStyle(ListItemType.Separator, repeatIndex); if (style3 != null) { style3.AddAttributesToRender(writer); } writer.RenderBeginTag(HtmlTextWriterTag.Td); } if (repeatIndex < repeatedItemCount) { user.RenderItem(ListItemType.Separator, repeatIndex, this, writer); } if (flag) { writer.RenderEndTag(); } } else if (flag && (repeatColumns > 1)) { writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.RenderEndTag(); } } } } if (flag) { if (i == (num3 - 1)) { int num10 = repeatColumns - num4; if (hasSeparators) { int num11 = num10 * 2; if (num11 >= num10) { num10 = num11; } } if (num10 != 0) { for (int k = 0; k < num10; k++) { writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.RenderEndTag(); } } } writer.RenderEndTag(); } else if (((i != (num3 - 1)) || user.HasFooter) && (!this.outerTableImplied && !this.IsListLayout)) { if (this.EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } if (user.HasFooter) { if (flag) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); if (repeatColumns != 1) { int num13 = repeatColumns; if (hasSeparators) { num13 += repeatColumns; } writer.AddAttribute(HtmlTextWriterAttribute.Colspan, num13.ToString(NumberFormatInfo.InvariantInfo)); } Style style4 = user.GetItemStyle(ListItemType.Footer, -1); if (style4 != null) { style4.AddAttributesToRender(writer); } writer.RenderBeginTag(HtmlTextWriterTag.Td); } user.RenderItem(ListItemType.Footer, -1, this, writer); if (flag) { writer.RenderEndTag(); writer.RenderEndTag(); } } if (control != null) { control.RenderEndTag(writer); } }
private void WriteBreakIfPresent(HtmlTextWriter writer, string text) { if (text == "b") { if (base.EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } else { writer.Write(text); } }
private void RenderHorizontalRepeater(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl) { int repeatedItemCount = user.RepeatedItemCount; int repeatColumns = this.repeatColumns; int num3 = 0; if (repeatColumns == 0) { repeatColumns = repeatedItemCount; } WebControl control = null; bool flag = false; switch (this.repeatLayout) { case System.Web.UI.WebControls.RepeatLayout.Table: control = new Table(); if (this.Caption.Length != 0) { ((Table) control).Caption = this.Caption; ((Table) control).CaptionAlign = this.CaptionAlign; } flag = true; break; case System.Web.UI.WebControls.RepeatLayout.Flow: control = new WebControl(HtmlTextWriterTag.Span); break; } bool hasSeparators = user.HasSeparators; control.ID = baseControl.ClientID; control.CopyBaseAttributes(baseControl); control.ApplyStyle(controlStyle); control.RenderBeginTag(writer); if (user.HasHeader) { if (flag) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); if ((repeatColumns != 1) || hasSeparators) { int num4 = repeatColumns; if (hasSeparators) { num4 += repeatColumns; } writer.AddAttribute(HtmlTextWriterAttribute.Colspan, num4.ToString(NumberFormatInfo.InvariantInfo)); } if (this.useAccessibleHeader) { writer.AddAttribute(HtmlTextWriterAttribute.Scope, "col"); } Style itemStyle = user.GetItemStyle(ListItemType.Header, -1); if (itemStyle != null) { itemStyle.AddAttributesToRender(writer); } if (this.useAccessibleHeader) { writer.RenderBeginTag(HtmlTextWriterTag.Th); } else { writer.RenderBeginTag(HtmlTextWriterTag.Td); } } user.RenderItem(ListItemType.Header, -1, this, writer); if (flag) { writer.RenderEndTag(); writer.RenderEndTag(); } else if (repeatColumns < repeatedItemCount) { if (this.EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } } for (int i = 0; i < repeatedItemCount; i++) { if (flag && (num3 == 0)) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); } if (flag) { Style style2 = user.GetItemStyle(ListItemType.Item, i); if (style2 != null) { style2.AddAttributesToRender(writer); } writer.RenderBeginTag(HtmlTextWriterTag.Td); } user.RenderItem(ListItemType.Item, i, this, writer); if (flag) { writer.RenderEndTag(); } if (hasSeparators && (i != (repeatedItemCount - 1))) { if (flag) { Style style3 = user.GetItemStyle(ListItemType.Separator, i); if (style3 != null) { style3.AddAttributesToRender(writer); } writer.RenderBeginTag(HtmlTextWriterTag.Td); } user.RenderItem(ListItemType.Separator, i, this, writer); if (flag) { writer.RenderEndTag(); } } num3++; if (flag && (i == (repeatedItemCount - 1))) { int num6 = repeatColumns - num3; if (hasSeparators) { int num7 = (num6 * 2) + 1; if (num7 > num6) { num6 = num7; } } for (int j = 0; j < num6; j++) { writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.RenderEndTag(); } } if ((num3 == repeatColumns) || (i == (repeatedItemCount - 1))) { if (flag) { writer.RenderEndTag(); } else if (repeatColumns < repeatedItemCount) { if (this.EnableLegacyRendering) { writer.WriteObsoleteBreak(); } else { writer.WriteBreak(); } } num3 = 0; } } if (user.HasFooter) { if (flag) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); if ((repeatColumns != 1) || hasSeparators) { int num9 = repeatColumns; if (hasSeparators) { num9 += repeatColumns; } writer.AddAttribute(HtmlTextWriterAttribute.Colspan, num9.ToString(NumberFormatInfo.InvariantInfo)); } Style style4 = user.GetItemStyle(ListItemType.Footer, -1); if (style4 != null) { style4.AddAttributesToRender(writer); } writer.RenderBeginTag(HtmlTextWriterTag.Td); } user.RenderItem(ListItemType.Footer, -1, this, writer); if (flag) { writer.RenderEndTag(); writer.RenderEndTag(); } } control.RenderEndTag(writer); }