[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