//
// System.Web.UI.HtmlControls.HtmlForm.cs
//
// Author:
// Dick Porter
//
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System.ComponentModel;
using System.Collections.Specialized;
using System.Web.UI.WebControls;
namespace System.Web.UI.HtmlControls
{
public class HtmlForm : HtmlContainerControl
{
public HtmlForm () : base ("form")
{
}
#if NET_2_0
[DefaultValue ("")]
public string DefaultButton
{
get {
string defaultbutton = Attributes["defaultbutton"];
if (defaultbutton == null) {
return (String.Empty);
}
return (defaultbutton);
}
set {
if (value == null) {
Attributes.Remove ("defaultbutton");
} else {
Attributes["defaultbutton"] = value;
}
}
}
[DefaultValue ("")]
public string DefaultFocus
{
get {
string defaultfocus = Attributes["defaultfocus"];
if (defaultfocus == null) {
return (String.Empty);
}
return (defaultfocus);
}
set {
if (value == null) {
Attributes.Remove ("defaultfocus");
} else {
Attributes["defaultfocus"] = value;
}
}
}
#endif
[DefaultValue ("")]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
public string Enctype
{
get {
string enc = Attributes["enctype"];
if (enc == null) {
return (String.Empty);
}
return (enc);
}
set {
if (value == null) {
Attributes.Remove ("enctype");
} else {
Attributes["enctype"] = value;
}
}
}
[DefaultValue ("")]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
public string Method
{
get {
string method = Attributes["method"];
if (method == null) {
return ("post");
}
return (method);
}
set {
if (value == null) {
Attributes.Remove ("method");
} else {
Attributes["method"] = value;
}
}
}
[DefaultValue ("")]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
#if NET_2_0
public virtual
#else
public
#endif
string Name
{
get {
string name = Attributes["name"];
if (name == null) {
return (UniqueID);
}
return (name);
}
set {
if (value == null) {
Attributes.Remove ("name");
} else {
Attributes["name"] = value;
}
}
}
#if NET_2_0
[DefaultValue (false)]
[MonoTODO]
public virtual bool SubmitDisabledControls
{
get {
throw new NotImplementedException ();
}
set {
throw new NotImplementedException ();
}
}
#endif
[DefaultValue ("")]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
public string Target
{
get {
string target = Attributes["target"];
if (target == null) {
return (String.Empty);
}
return (target);
}
set {
if (value == null) {
Attributes.Remove ("target");
} else {
Attributes["target"] = value;
}
}
}
#if NET_2_0
public override
#else
// New in NET1.1 sp1
public new
#endif
string UniqueID
{
get {
return base.UniqueID;
}
}
#if NET_2_0
[MonoTODO]
protected override ControlCollection CreateControlCollection ()
{
return base.CreateControlCollection ();
}
#endif
#if NET_2_0
protected internal
#else
protected
#endif
override void OnInit (EventArgs e)
{
Page.RegisterViewStateHandler ();
base.OnInit (e);
}
#if NET_2_0
protected internal override void OnPreRender (EventArgs e)
{
string focus_id = null;
bool render_uplevel = false;
bool need_script_block = false;
base.OnPreRender(e);
/* this bit is c&p'ed from BaseValidator.DetermineRenderUplevel */
try {
if (Page != null && Page.Request != null)
render_uplevel = (
/* From someplace on the web: "JavaScript 1.2
* and later (also known as ECMAScript) has
* built-in support for regular
* expressions" */
((Page.Request.Browser.EcmaScriptVersion.Major == 1
&& Page.Request.Browser.EcmaScriptVersion.Minor >= 2)
|| (Page.Request.Browser.EcmaScriptVersion.Major > 1))
/* document.getElementById, .getAttribute,
* etc, are all DOM level 1. I don't think we
* use anything in level 2.. */
&& Page.Request.Browser.W3CDomVersion.Major >= 1);
}
catch {
/* this can happen with a fake Page in nunit
* tests, since Page.Context == null */
;
}
/* figure out if we have some control we're going to focus */
if (DefaultFocus != null && DefaultFocus != "")
focus_id = DefaultFocus;
else if (DefaultButton != null && DefaultButton != "")
focus_id = DefaultButton;
/* presumably there are other conditions to
* this test, not just whether or not we have
* a default focus/button */
need_script_block = (focus_id != null);
if (render_uplevel) {
Page.RequiresPostBackScript();
if (need_script_block && !Page.ClientScript.IsClientScriptBlockRegistered ("Mono-System.Web-HtmlScriptBlock")) {
Page.ClientScript.RegisterClientScriptBlock ("Mono-System.Web-HtmlScriptBlock",
String.Format ("",
Page.ClientScript.GetWebResourceUrl (GetType(),
"webform.js")));
}
if (focus_id != null) {
Page.ClientScript.RegisterStartupScript ("HtmlForm-DefaultButton-StartupScript",
String.Format ("\n", focus_id));
}
}
}
#endif
protected override void RenderAttributes (HtmlTextWriter w)
{
/* Need to always render: name, method, action
* and id
*/
string action = Page.Request.FilePath;
string query = Page.Request.QueryStringRaw;
if (query != null && query.Length > 0) {
action += "?" + query;
}
w.WriteAttribute ("name", Name);
w.WriteAttribute ("method", Method);
w.WriteAttribute ("action", action);
if (ID == null) {
/* If ID != null then HtmlControl will
* write the id attribute
*/
w.WriteAttribute ("id", ClientID);
Attributes.Remove ("id");
}
string submit = Page.GetSubmitStatements ();
if (submit != null && submit != "")
w.WriteAttribute ("onsubmit", submit);
/* enctype and target should not be written if
* they are empty
*/
string enctype = Enctype;
if (enctype != null && enctype != "") {
w.WriteAttribute ("enctype", enctype);
}
string target = Target;
if (target != null && target != "") {
w.WriteAttribute ("target", target);
}
#if NET_2_0
string defaultbutton = DefaultButton;
if (defaultbutton != null && defaultbutton != "") {
Control c = FindControl (defaultbutton);
if (c == null || !(c is IButtonControl))
throw new InvalidOperationException(String.Format ("The DefaultButton of '{0}' must be the ID of a control of type IButtonControl.",
ID));
}
#endif
/* Now remove them from the hash so the base
* RenderAttributes can do all the rest
*/
Attributes.Remove ("name");
Attributes.Remove ("method");
Attributes.Remove ("enctype");
Attributes.Remove ("target");
#if NET_2_0
Attributes.Remove ("defaultfocus");
Attributes.Remove ("defaultbutton");
#endif
base.RenderAttributes (w);
}
#if NET_2_0
protected internal
#else
protected
#endif
override void RenderChildren (HtmlTextWriter w)
{
Page.OnFormRender (w, ClientID);
base.RenderChildren (w);
Page.OnFormPostRender (w, ClientID);
}
#if NET_2_0
/* According to corcompare */
[MonoTODO]
public override void RenderControl (HtmlTextWriter w)
{
base.RenderControl (w);
}
#endif
#if NET_2_0
protected internal
#else
protected
#endif
override void Render (HtmlTextWriter w)
{
base.Render (w);
}
}
}