PageRenderTime 25ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/WebSites/Appleseed/CSSFriendly/Adapters/DataListAdapter.cs

https://code.google.com/p/appleseedapp/
C# | 353 lines | 240 code | 46 blank | 67 comment | 39 complexity | f41fae790a08e292178b8223a333a4a9 MD5 | raw file
Possible License(s): LGPL-2.1, CC-BY-SA-3.0, BSD-3-Clause, GPL-2.0, Apache-2.0
  1. // --------------------------------------------------------------------------------------------------------------------
  2. // <copyright file="DataListAdapter.cs" company="--">
  3. // Copyright Š -- 2011. All Rights Reserved.
  4. // </copyright>
  5. // <summary>
  6. // The data list adapter.
  7. // </summary>
  8. // --------------------------------------------------------------------------------------------------------------------
  9. namespace CSSFriendly
  10. {
  11. using System;
  12. using System.Diagnostics;
  13. using System.Web.UI;
  14. using System.Web.UI.WebControls;
  15. using System.Web.UI.WebControls.Adapters;
  16. /// <summary>
  17. /// The data list adapter.
  18. /// </summary>
  19. /// <remarks>
  20. /// </remarks>
  21. public class DataListAdapter : WebControlAdapter
  22. {
  23. #region Constants and Fields
  24. /// <summary>
  25. /// The extender.
  26. /// </summary>
  27. private WebControlAdapterExtender extender;
  28. #endregion
  29. #region Properties
  30. /// <summary>
  31. /// Gets the extender.
  32. /// </summary>
  33. /// <remarks>
  34. /// </remarks>
  35. private WebControlAdapterExtender Extender
  36. {
  37. get
  38. {
  39. if (((this.extender == null) && (this.Control != null)) ||
  40. ((this.extender != null) && (this.Control != this.extender.AdaptedControl)))
  41. {
  42. this.extender = new WebControlAdapterExtender(this.Control);
  43. }
  44. Debug.Assert(this.extender != null, "CSS Friendly adapters internal error", "Null extender instance");
  45. return this.extender;
  46. }
  47. }
  48. /// <summary>
  49. /// Gets the repeat columns.
  50. /// </summary>
  51. /// <remarks>
  52. /// </remarks>
  53. private int RepeatColumns
  54. {
  55. get
  56. {
  57. var dataList = this.Control as DataList;
  58. var nRet = 1;
  59. if (dataList != null)
  60. {
  61. if (dataList.RepeatColumns == 0)
  62. {
  63. if (dataList.RepeatDirection == RepeatDirection.Horizontal)
  64. {
  65. nRet = dataList.Items.Count;
  66. }
  67. }
  68. else
  69. {
  70. nRet = dataList.RepeatColumns;
  71. }
  72. }
  73. return nRet;
  74. }
  75. }
  76. #endregion
  77. #region Methods
  78. /// <summary>
  79. /// Overrides the <see cref="M:System.Web.UI.Control.OnInit(System.EventArgs)"/> method for the associated control.
  80. /// </summary>
  81. /// <param name="e">
  82. /// An <see cref="T:System.EventArgs"/> that contains the event data.
  83. /// </param>
  84. /// /
  85. /// PROTECTED
  86. /// <remarks>
  87. /// </remarks>
  88. protected override void OnInit(EventArgs e)
  89. {
  90. base.OnInit(e);
  91. if (this.Extender.AdapterEnabled)
  92. {
  93. RegisterScripts();
  94. }
  95. }
  96. /// <summary>
  97. /// Creates the beginning tag for the Web control in the markup that is transmitted to the target browser.
  98. /// </summary>
  99. /// <param name="writer">
  100. /// The <see cref="T:System.Web.UI.HtmlTextWriter"/> containing methods to render the target-specific output.
  101. /// </param>
  102. /// <remarks>
  103. /// </remarks>
  104. protected override void RenderBeginTag(HtmlTextWriter writer)
  105. {
  106. if (this.Extender.AdapterEnabled)
  107. {
  108. this.Extender.RenderBeginTag(writer, "AspNet-DataList");
  109. }
  110. else
  111. {
  112. base.RenderBeginTag(writer);
  113. }
  114. }
  115. /// <summary>
  116. /// Generates the target-specific inner markup for the Web control to which the control adapter is attached.
  117. /// </summary>
  118. /// <param name="writer">
  119. /// The <see cref="T:System.Web.UI.HtmlTextWriter"/> containing methods to render the target-specific output.
  120. /// </param>
  121. /// <remarks>
  122. /// </remarks>
  123. protected override void RenderContents(HtmlTextWriter writer)
  124. {
  125. if (this.Extender.AdapterEnabled)
  126. {
  127. var dataList = this.Control as DataList;
  128. if (dataList != null)
  129. {
  130. writer.Indent++;
  131. writer.WriteLine();
  132. writer.WriteBeginTag("table");
  133. writer.WriteAttribute("cellpadding", "0");
  134. writer.WriteAttribute("cellspacing", "0");
  135. writer.WriteAttribute("summary", this.Control.ToolTip);
  136. writer.Write(HtmlTextWriter.TagRightChar);
  137. writer.Indent++;
  138. if (dataList.HeaderTemplate != null)
  139. {
  140. var container = new PlaceHolder();
  141. dataList.HeaderTemplate.InstantiateIn(container);
  142. container.DataBind();
  143. if ((container.Controls.Count == 1) &&
  144. typeof(LiteralControl).IsInstanceOfType(container.Controls[0]))
  145. {
  146. writer.WriteLine();
  147. writer.WriteBeginTag("caption");
  148. writer.Write(HtmlTextWriter.TagRightChar);
  149. var literalControl = container.Controls[0] as LiteralControl;
  150. if (literalControl != null)
  151. {
  152. writer.Write(literalControl.Text.Trim());
  153. }
  154. writer.WriteEndTag("caption");
  155. }
  156. else
  157. {
  158. writer.WriteLine();
  159. writer.WriteBeginTag("thead");
  160. writer.Write(HtmlTextWriter.TagRightChar);
  161. writer.Indent++;
  162. writer.WriteLine();
  163. writer.WriteBeginTag("tr");
  164. writer.Write(HtmlTextWriter.TagRightChar);
  165. writer.Indent++;
  166. writer.WriteLine();
  167. writer.WriteBeginTag("th");
  168. writer.WriteAttribute("colspan", this.RepeatColumns.ToString());
  169. writer.Write(HtmlTextWriter.TagRightChar);
  170. writer.Indent++;
  171. writer.WriteLine();
  172. container.RenderControl(writer);
  173. writer.Indent--;
  174. writer.WriteLine();
  175. writer.WriteEndTag("th");
  176. writer.Indent--;
  177. writer.WriteLine();
  178. writer.WriteEndTag("tr");
  179. writer.Indent--;
  180. writer.WriteLine();
  181. writer.WriteEndTag("thead");
  182. }
  183. }
  184. if (dataList.FooterTemplate != null)
  185. {
  186. writer.WriteLine();
  187. writer.WriteBeginTag("tfoot");
  188. writer.Write(HtmlTextWriter.TagRightChar);
  189. writer.Indent++;
  190. writer.WriteLine();
  191. writer.WriteBeginTag("tr");
  192. writer.Write(HtmlTextWriter.TagRightChar);
  193. writer.Indent++;
  194. writer.WriteLine();
  195. writer.WriteBeginTag("td");
  196. writer.WriteAttribute("colspan", this.RepeatColumns.ToString());
  197. writer.Write(HtmlTextWriter.TagRightChar);
  198. writer.Indent++;
  199. var container = new PlaceHolder();
  200. dataList.FooterTemplate.InstantiateIn(container);
  201. container.DataBind();
  202. container.RenderControl(writer);
  203. writer.Indent--;
  204. writer.WriteLine();
  205. writer.WriteEndTag("td");
  206. writer.Indent--;
  207. writer.WriteLine();
  208. writer.WriteEndTag("tr");
  209. writer.Indent--;
  210. writer.WriteLine();
  211. writer.WriteEndTag("tfoot");
  212. }
  213. if (dataList.ItemTemplate != null)
  214. {
  215. writer.WriteLine();
  216. writer.WriteBeginTag("tbody");
  217. writer.Write(HtmlTextWriter.TagRightChar);
  218. writer.Indent++;
  219. var nItemsInColumn = (int)Math.Ceiling(dataList.Items.Count / ((Double)this.RepeatColumns));
  220. for (var iItem = 0; iItem < dataList.Items.Count; iItem++)
  221. {
  222. var nRow = iItem / this.RepeatColumns;
  223. var nCol = iItem % this.RepeatColumns;
  224. var nDesiredIndex = iItem;
  225. if (dataList.RepeatDirection == RepeatDirection.Vertical)
  226. {
  227. nDesiredIndex = (nCol * nItemsInColumn) + nRow;
  228. }
  229. if ((iItem % this.RepeatColumns) == 0)
  230. {
  231. writer.WriteLine();
  232. writer.WriteBeginTag("tr");
  233. writer.Write(HtmlTextWriter.TagRightChar);
  234. writer.Indent++;
  235. }
  236. writer.WriteLine();
  237. writer.WriteBeginTag("td");
  238. writer.Write(HtmlTextWriter.TagRightChar);
  239. writer.Indent++;
  240. foreach (Control itemCtrl in dataList.Items[iItem].Controls)
  241. {
  242. itemCtrl.RenderControl(writer);
  243. }
  244. writer.Indent--;
  245. writer.WriteLine();
  246. writer.WriteEndTag("td");
  247. if (((iItem + 1) % this.RepeatColumns) == 0)
  248. {
  249. writer.Indent--;
  250. writer.WriteLine();
  251. writer.WriteEndTag("tr");
  252. }
  253. }
  254. if ((dataList.Items.Count % this.RepeatColumns) != 0)
  255. {
  256. writer.Indent--;
  257. writer.WriteLine();
  258. writer.WriteEndTag("tr");
  259. }
  260. writer.Indent--;
  261. writer.WriteLine();
  262. writer.WriteEndTag("tbody");
  263. }
  264. writer.Indent--;
  265. writer.WriteLine();
  266. writer.WriteEndTag("table");
  267. writer.Indent--;
  268. writer.WriteLine();
  269. }
  270. }
  271. else
  272. {
  273. base.RenderContents(writer);
  274. }
  275. }
  276. /// <summary>
  277. /// Creates the ending tag for the Web control in the markup that is transmitted to the target browser.
  278. /// </summary>
  279. /// <param name="writer">
  280. /// The <see cref="T:System.Web.UI.HtmlTextWriter"/> containing methods to render the target-specific output.
  281. /// </param>
  282. /// <remarks>
  283. /// </remarks>
  284. protected override void RenderEndTag(HtmlTextWriter writer)
  285. {
  286. if (this.Extender.AdapterEnabled)
  287. {
  288. this.Extender.RenderEndTag(writer);
  289. }
  290. else
  291. {
  292. base.RenderEndTag(writer);
  293. }
  294. }
  295. /// <summary>
  296. /// Registers the scripts.
  297. /// </summary>
  298. /// /
  299. /// PRIVATE
  300. /// <remarks>
  301. /// </remarks>
  302. private static void RegisterScripts()
  303. {
  304. }
  305. #endregion
  306. }
  307. }