[Mono-devel-list] Net 1.1 Accessibility patch for System.Web

Eyal Alaluf eyala at mainsoft.com
Tue Jul 26 05:27:35 EDT 2005


Hi, Gonzalo & everyone.

Attached is a patch for enabling accessibility features in System.Web. Most of the features
were implemented in Mono under the NET_2_0 profile but are actually part of the
.Net framework 1.1 (some maybe in a hotfix or service pack 1 for .Net 1.1).
Please review the attached. It was tested with Grasshopper and is now integrated into Mono.
BTW, is it good practice to use '#if NET 1_1' or one should simply stop using it and assume
Mono is for 1.1 and up?

Eyal.
-------------- next part --------------
Index: Table.cs

===================================================================

--- Table.cs	(revision 47365)

+++ Table.cs	(working copy)

@@ -97,7 +97,7 @@

 			set { ((TableStyle) ControlStyle).BackImageUrl = value; }

 		}

 
-#if NET_2_0

+#if NET_1_1

 		[DefaultValue (""), WebCategory ("Accessibility"), Localizable (true)]

 		public virtual string Caption

 		{

@@ -227,12 +227,13 @@

 			return new TableStyle (ViewState);

 		}

 		

-#if NET_2_0

+#if NET_1_1

     	public override void RenderBeginTag (HtmlTextWriter writer)

 		{

 			base.RenderBeginTag (writer);

 			if (Caption != "") {

-				writer.AddAttribute ("align", CaptionAlign.ToString());

+				if (CaptionAlign != TableCaptionAlign.NotSet)				

+					writer.AddAttribute(HtmlTextWriterAttribute.Align, CaptionAlign.ToString());

 				writer.RenderBeginTag (HtmlTextWriterTag.Caption);

 				writer.Write (Caption);

 				writer.RenderEndTag ();

Index: Label.cs

===================================================================

--- Label.cs	(revision 47365)

+++ Label.cs	(working copy)

@@ -72,12 +72,14 @@

 			set { ViewState ["Text"] = value; }

 		}

 		

-#if NET_2_0

+#if NET_1_1

+		[WebCategory ("Accessibility")]

+		[DefaultValueAttribute ("")]

+#if NET_2_0
 		[ThemeableAttribute (false)]

-		[DefaultValueAttribute ("")]

 		[IDReferencePropertyAttribute (typeof(System.Web.UI.Control))]

-		[WebCategory ("Accessibility")]

 		[TypeConverterAttribute (typeof(AssociatedControlConverter))]

+#endif
 		public string AssociatedControlID

 		{

 			get {

Index: Image.cs

===================================================================

--- Image.cs	(revision 47365)

+++ Image.cs	(working copy)

@@ -129,11 +129,13 @@

 			}

 		}

 		

-#if NET_2_0

+#if NET_1_1

 		[WebCategory ("Accessibility")]

 		[DefaultValueAttribute ("")]

+#if NET_2_0
 		[UrlPropertyAttribute]

 		[EditorAttribute ("System.Web.UI.Design.UrlEditor, System.Design, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]

+#endif
 		public string DescriptionUrl {

 			get {

 				object o = ViewState["DescriptionUrl"];

@@ -170,9 +172,9 @@

 				writer.AddAttribute(HtmlTextWriterAttribute.Src, ResolveUrl(ImageUrl));

 			}

 

-#if NET_2_0

+#if NET_1_1

 			if (DescriptionUrl.Length > 0)

-				writer.AddAttribute (HtmlTextWriterAttribute.Longdesc, DescriptionUrl);

+				writer.AddAttribute ("longdesc", DescriptionUrl);

 				

 			if (AlternateText.Length > 0 || GenerateEmptyAlternateText)

 				writer.AddAttribute(HtmlTextWriterAttribute.Alt, AlternateText);

Index: BaseDataList.cs

===================================================================

--- BaseDataList.cs	(revision 47365)

+++ BaseDataList.cs	(working copy)

@@ -479,5 +479,29 @@

 					return null; 
 			}
 		#endif
+
+#if NET_1_1
+		public virtual TableCaptionAlign CaptionAlign
+		{
+			get 
+			{
+				object o = ViewState ["CaptionAlign"];
+				return (o == null) ? TableCaptionAlign.NotSet : (TableCaptionAlign) o;
+			}
+
+			set { ViewState ["CaptionAlign"] = value; }
+		}
+
+		public virtual bool UseAccessibleHeader
+		{
+			get 
+			{
+				object o = ViewState ["UseAccessibleHeader"];
+				return (o == null) ? false : (Boolean) o;
+			}
+
+			set { ViewState ["UseAccessibleHeader"] = value; }
+		}
+#endif
 	}
 }
Index: DataList.cs

===================================================================

--- DataList.cs	(revision 47365)

+++ DataList.cs	(working copy)

@@ -744,11 +744,20 @@

 				templateTable.ID = ClientID;
 				templateTable.CopyBaseAttributes (this);
 				templateTable.ApplyStyle (ControlStyle);
+#if NET_1_1
+				templateTable.CaptionAlign = CaptionAlign;
+				templateTable.Caption = Caption;
+#endif
 				templateTable.RenderBeginTag (writer);
 			} else {
 				repeater.RepeatDirection = RepeatDirection;
 				repeater.RepeatLayout = RepeatLayout;
 				repeater.RepeatColumns = RepeatColumns;
+#if NET_1_1
+				repeater.CaptionAlign = CaptionAlign;
+				repeater.Caption = Caption;
+				repeater.UseAccessibleHeader = UseAccessibleHeader;
+#endif
 			}
 
 			repeater.RenderRepeater (writer, this, ControlStyle, this);
Index: RepeatInfo.cs

===================================================================

--- RepeatInfo.cs	(revision 47365)

+++ RepeatInfo.cs	(working copy)

@@ -45,6 +45,11 @@

 		private int             repeatColumns;

 		private RepeatDirection repeatDirection;

 		private RepeatLayout    repeatLayout;

+#if NET_1_1

+		private string caption = "";

+		private TableCaptionAlign captionAlign = TableCaptionAlign.NotSet;

+		private  bool useAccessibleHeader = false;

+#endif

 

 		public RepeatInfo()

 		{

@@ -144,6 +149,13 @@

 				if(RepeatLayout == RepeatLayout.Table)

 				{

 					ctrl = new Table();

+#if NET_1_1

+					if (Caption.Length != 0)

+					{

+						((Table) ctrl).CaptionAlign = CaptionAlign;

+						((Table) ctrl).Caption = Caption; 						

+					}

+#endif

 					isTable = true;

 				} else

 				{

@@ -173,12 +185,24 @@

 							colSpan += colsCount;

 						writer.AddAttribute(HtmlTextWriterAttribute.Colspan, colSpan.ToString(NumberFormatInfo.InvariantInfo));

 					}

+#if NET_1_1

+					if (UseAccessibleHeader)					

+						writer.AddAttribute("scope", "col", false);

+ 

+#endif

 					itemStyle = user.GetItemStyle(ListItemType.Header, -1);

 					if(itemStyle != null)

 					{

 						itemStyle.AddAttributesToRender(writer);

 					}

+#if NET_1_1

+					if (UseAccessibleHeader)

+						writer.RenderBeginTag(HtmlTextWriterTag.Th);

+					else

+						writer.RenderBeginTag(HtmlTextWriterTag.Td);

+#else

 					writer.RenderBeginTag(HtmlTextWriterTag.Td);

+#endif

 				}

 				user.RenderItem(ListItemType.Header, -1, this, writer);

 				if(isTable)

@@ -302,7 +326,19 @@

 			bool hasSeps = user.HasSeparators;

 			if (!outerTableImp){

 				isTable = (RepeatLayout == RepeatLayout.Table);

-				ctrl = (isTable) ? new Table () : new WebControl (HtmlTextWriterTag.Span);

+				if (isTable)

+				{

+					ctrl = new Table ();

+#if NET_1_1

+					if (Caption.Length != 0)

+					{

+						((Table) ctrl).CaptionAlign = CaptionAlign;

+						((Table) ctrl).Caption = Caption; 

+					}

+#endif

+				}

+				else 

+					ctrl = new WebControl (HtmlTextWriterTag.Span);

 				ctrl.ID = baseControl.ClientID;

 				ctrl.CopyBaseAttributes (baseControl);

 				ctrl.ApplyStyle (controlStyle);

@@ -321,10 +357,21 @@

 						writer.AddAttribute (HtmlTextWriterAttribute.Colspan,

 						     colSpan.ToString (NumberFormatInfo.InvariantInfo));

 					}

+#if NET_1_1

+					if (UseAccessibleHeader)

+						writer.AddAttribute("scope", "col", false);

+#endif

 					itemStyle = user.GetItemStyle (ListItemType.Header, -1);

 					if (itemStyle != null)

 						itemStyle.AddAttributesToRender (writer);

+#if NET_1_1

+					if (UseAccessibleHeader)

+						writer.RenderBeginTag(HtmlTextWriterTag.Th);

+					else

+						writer.RenderBeginTag(HtmlTextWriterTag.Td);

+#else

 					writer.RenderBeginTag (HtmlTextWriterTag.Td);

+#endif

 				}

 

 				user.RenderItem (ListItemType.Header, -1, this, writer);

@@ -404,5 +451,28 @@

 			if (ctrl != null)

 				ctrl.RenderEndTag(writer);

 		}

+

+#if NET_1_1

+

+		public string Caption

+		{

+			get {return caption;}

+			set { caption = value; }

+		}

+

+		public TableCaptionAlign CaptionAlign

+		{

+			get {return captionAlign;}

+			set { captionAlign = value; }

+		}

+

+		

+

+		public bool UseAccessibleHeader

+		{

+			get {return useAccessibleHeader;}

+			set { useAccessibleHeader = value; }		

+		}

+#endif

 	}

 }

Index: ChangeLog

===================================================================

--- ChangeLog	(revision 47418)

+++ ChangeLog	(working copy)

@@ -1,3 +1,8 @@

+2005-07-25  Eyal Alaluf <eyala at mainsoft.com>
+	* Table.cs Label.cs Image.cs BaseDataList.cs DataList.cs RepeatInfo.cs
+	  DataGrid.cs TableCaptionAlign.cs: Accessiblity feature is part of NET_1_1
+	  service pack fixes. In Mono it was available only under NET_2_0 config.
+
 2005-07-19  Eyal Alaluf <eyala at mainsoft.com>
 	* Added XmlBuilder.jvm.cs for the TARGET_J2EE configuration.
 
Index: DataGrid.cs

===================================================================

--- DataGrid.cs	(revision 47365)

+++ DataGrid.cs	(working copy)

@@ -944,6 +944,10 @@

 
 			Table display = (Table) Controls [0];
 			display.CopyBaseAttributes (this);
+#if NET_1_1
+			display.Caption = Caption;
+			display.CaptionAlign = CaptionAlign;
+#endif
 			if (ControlStyleCreated) {
 				display.ApplyStyle (ControlStyle);
 			} else {
@@ -1182,6 +1186,10 @@

 					current.Initialize();
 				}
 				deployTable = new DataGridTableInternal();
+#if NET_1_1
+				deployTable.Caption = Caption;
+				deployTable.CaptionAlign = CaptionAlign;
+#endif
 				Controls.Add(deployTable);
 				deployRows = deployTable.Rows;
 
@@ -1334,7 +1342,17 @@

 			
 			for(int i = 0; i < columns.Length; i++)
 			{
+#if NET_1_1
+				if (item.ItemType == ListItemType.Header && this.UseAccessibleHeader) 
+				{
+					cCell = new TableHeaderCell();
+					cCell.Attributes["scope"] = "col";
+				}
+				else
+					cCell = new TableCell();
+#else
 				cCell = new TableCell();
+#endif
 				columns[i].InitializeCell(cCell, i, item.ItemType);
 				cells.Add(cCell);
 			}
Index: TableCaptionAlign.cs

===================================================================

--- TableCaptionAlign.cs	(revision 47365)

+++ TableCaptionAlign.cs	(working copy)

@@ -25,7 +25,7 @@

 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
 //
 
-#if NET_2_0
+#if NET_1_1
 namespace System.Web.UI.WebControls {
         public enum TableCaptionAlign {
                 NotSet = 0,


More information about the Mono-devel-list mailing list