-/* System.Web.UI.HtmlControls\r
-* Authors\r
-* Leen Toelen (toelen@hotmail.com)\r
-*/\r
-\r
-using System;\r
-using System.Collections;\r
-using System.ComponentModel;\r
-using System.Text;\r
-using System.Web;\r
-using System.Web.UI;\r
-using System.Web.Util;\r
-\r
-namespace System.Web.UI.HtmlControls{\r
- \r
- public class HtmlForm : HtmlContainerControl{\r
- \r
- // Unused\r
- //private static string SmartNavIncludeScriptKey = "SmartNavIncludeScript";\r
- \r
- public HtmlForm(): base("form"){}\r
- \r
- protected override void RenderAttributes(HtmlTextWriter writer){\r
- writer.WriteAttribute("name", Name);\r
- Attributes.Remove("name");\r
- writer.WriteAttribute("method", Method);\r
- Attributes.Remove("method");\r
- writer.WriteAttribute("action", Action, true);\r
- Attributes.Remove("action");\r
- if (Enctype != null){\r
- writer.WriteAttribute ("enctype", Enctype);\r
- Attributes.Remove ("enctype");\r
- }\r
-\r
- Hashtable onSubmit = Page.ClientScript.submitStatements;\r
- if (onSubmit != null && onSubmit.Count > 0){\r
- StringBuilder sb = new StringBuilder ();\r
- string prev = Attributes ["onsubmit"];\r
- if (prev != null){\r
- sb.Append (prev);\r
- Attributes.Remove ("onsubmit");\r
- }\r
-\r
- foreach (string s in onSubmit.Values)\r
- sb.Append (s);\r
-\r
- writer.WriteAttribute ("language", "javascript");\r
- writer.WriteAttribute ("onsubmit", sb.ToString ());\r
- }\r
-\r
- if (ID == null)\r
- writer.WriteAttribute ("id", ClientID);\r
-\r
- base.RenderAttributes (writer);\r
- }\r
- \r
- protected override void Render(HtmlTextWriter output){\r
- /*** Disabled smart navigation. We have no scripts - Gonzalo\r
- if (Page.SmartNavigation == false){\r
- base.Render (output);\r
- return;\r
- }\r
-\r
- ((IAttributeAccessor) this).SetAttribute("_smartNavigation","true");\r
- HttpBrowserCapabilities browserCap = Context.Request.Browser;\r
- if (browserCap.Browser.ToLower() != "ie" && browserCap.MajorVersion < 5){\r
- base.Render(output);\r
- return;\r
- }\r
- output.WriteLine("<IFRAME ID=_hifSmartNav NAME=_hifSmartNav STYLE=display:none ></IFRAME>");\r
- \r
- if (browserCap.MinorVersion < 0.5 && browserCap.MajorVersion != 5)\r
- Page.RegisterClientScriptFile("SmartNavIncludeScript","JScript","SmartNavIE5.js");\r
- else if (Page.IsPostBack) Page.RegisterClientScriptFile("SmartNavIncludeScript","JScript","SmartNav.js");\r
- */\r
- base.Render(output);\r
- }\r
- \r
- protected override void RenderChildren (HtmlTextWriter writer)\r
- {\r
- Page.OnFormRender (writer,ClientID);\r
- base.RenderChildren (writer);\r
- Page.OnFormPostRender (writer,ClientID);\r
- }\r
- \r
- protected override void OnInit(EventArgs e){\r
- base.OnInit(e);\r
- Page.RegisterViewStateHandler();\r
- }\r
- \r
- internal string Action {\r
- get{\r
- string executionFilePath = Context.Request.CurrentExecutionFilePath;\r
- string filePath = Context.Request.FilePath;\r
- string attr;\r
- if (executionFilePath == filePath) {\r
- attr = filePath;\r
- int lastSlash = attr.LastIndexOf('/');\r
- if (lastSlash >= 0)\r
- attr = attr.Substring(lastSlash + 1);\r
- } else {\r
- attr = UrlUtils.MakeRelative (executionFilePath, UrlUtils.GetDirectory (filePath));\r
- if (attr == null)\r
- attr = executionFilePath;\r
- }\r
- string queryString = Context.Request.QueryStringRaw;\r
- if (queryString != null && queryString.Length > 0)\r
- attr = String.Concat(attr, '?', queryString);\r
- return attr;\r
- }\r
- }\r
- \r
- [DefaultValue("")]\r
- [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
- [WebCategory("Behavior")]\r
- public string Enctype{\r
- get{\r
- string attr = Attributes["enctype"];\r
- if (attr != null){\r
- return attr;\r
- }\r
- return "";\r
- }\r
- set{\r
- Attributes["enctype"] = AttributeToString(value);\r
- }\r
- }\r
- \r
- [DefaultValue("")]\r
- [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
- [WebCategory("Behavior")]\r
- public string Method{\r
- get{\r
- string attr = Attributes["method"];\r
- if (attr != null){\r
- return attr;\r
- }\r
- return "post";\r
- }\r
- set{\r
- Attributes["method"] = AttributeToString(value);\r
- }\r
- }\r
- \r
- [DefaultValue("")]\r
- [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
- [WebCategory("Behavior")]\r
- public string Target{\r
- get{\r
- string attr = Attributes["target"];\r
- if (attr != null){\r
- return attr;\r
- }\r
- return String.Empty;\r
- }\r
- set{\r
- Attributes["target"] = AttributeToString(value);\r
- }\r
- }\r
- \r
- [DefaultValue("")]\r
- [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
- [WebCategory("Appearance")]\r
- public virtual string Name{\r
- get{\r
- return UniqueID;\r
- }\r
- set {\r
- }\r
- } \r
- } // class HtmlForm\r
-} // namespace System.Web.UI.HtmlControls\r
-\r
+//
+// System.Web.UI.HtmlControls.HtmlForm.cs
+//
+// Author:
+// Dick Porter <dick@ximian.com>
+//
+// 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.Security.Permissions;
+using System.Web.Util;
+using System.Web.UI.WebControls;
+
+namespace System.Web.UI.HtmlControls
+{
+ // CAS
+ [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ public class HtmlForm : HtmlContainerControl
+ {
+ bool inited;
+
+ public HtmlForm () : base ("form")
+ {
+ }
+
+#if NET_2_0
+ string defaultbutton = "";
+ [DefaultValue ("")]
+ public string DefaultButton
+ {
+ get {
+ return defaultbutton;
+ }
+ set {
+ defaultbutton = (value == null ? "" : value);
+ }
+ }
+
+ string defaultfocus = "";
+ [DefaultValue ("")]
+ public string DefaultFocus
+ {
+ get {
+ return defaultfocus;
+ }
+ set {
+ defaultfocus = (value == null ? "" : 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) || (method.Length == 0)) {
+ return ("post");
+ }
+
+ return (method);
+ }
+ set {
+ if (value == null) {
+ Attributes.Remove ("method");
+ } else {
+ Attributes["method"] = value;
+ }
+ }
+ }
+
+ [DefaultValue ("")]
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ public virtual string Name
+ {
+ get {
+ return UniqueID;
+ }
+ set {
+ /* why am i here? I do nothing. */
+ }
+ }
+
+#if NET_2_0
+ bool submitdisabledcontrols = false;
+ [DefaultValue (false)]
+ public virtual bool SubmitDisabledControls
+ {
+ get {
+ return submitdisabledcontrols;
+ }
+ set {
+ submitdisabledcontrols = value;
+ }
+ }
+#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;
+ }
+ }
+ }
+
+ public override string UniqueID {
+ get {
+ return base.UniqueID;
+ }
+ }
+
+#if NET_2_0
+ [MonoTODO ("why override?")]
+ protected override ControlCollection CreateControlCollection ()
+ {
+ return base.CreateControlCollection ();
+ }
+#endif
+
+#if NET_2_0
+ protected internal
+#else
+ protected
+#endif
+ override void OnInit (EventArgs e)
+ {
+ inited = true;
+ Page.RegisterViewStateHandler ();
+
+#if NET_2_0
+ Page.RegisterForm (this);
+#endif
+
+ base.OnInit (e);
+ }
+
+#if NET_2_0
+ internal bool DetermineRenderUplevel ()
+ {
+ /* this bit is c&p'ed from BaseValidator.DetermineRenderUplevel */
+ try {
+ if (Page != null && Page.Request != null)
+ return (
+ /* 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 */
+ ;
+ }
+
+ return false;
+ }
+
+ protected internal override void OnPreRender (EventArgs e)
+ {
+ base.OnPreRender(e);
+ }
+#endif
+
+ protected override void RenderAttributes (HtmlTextWriter w)
+ {
+ /* Need to always render: name, method, action
+ * and id
+ */
+
+ string action;
+ string file_path = Page.Request.FilePath;
+ string current_path = Page.Request.CurrentExecutionFilePath;
+ if (file_path == current_path) {
+ // Just the filename will do
+ action = UrlUtils.GetFile (file_path);
+ } else {
+ // Fun. We need to make cookieless sessions work, so no
+ // absolute paths here.
+ Uri current_uri = new Uri ("http://host" + current_path);
+ Uri fp_uri = new Uri ("http://host" + file_path);
+ action = fp_uri.MakeRelative (current_uri);
+ }
+
+ action += Page.Request.QueryStringRaw;
+#if TARGET_J2EE
+ // Allow the page to transform action to a portlet action url
+ if (Page.IsPortletRender)
+ action = Page.RenderResponse.createActionURL(action);
+#endif
+
+ 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 != "") {
+ Attributes.Remove ("onsubmit");
+ 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 ("method");
+ Attributes.Remove ("enctype");
+ Attributes.Remove ("target");
+
+ base.RenderAttributes (w);
+ }
+
+#if NET_2_0
+ protected internal
+#else
+ protected
+#endif
+ override void RenderChildren (HtmlTextWriter w)
+ {
+ if (!inited) {
+ Page.RegisterViewStateHandler ();
+#if NET_2_0
+ Page.RegisterForm (this);
+#endif
+ }
+ Page.OnFormRender (w, ClientID);
+ base.RenderChildren (w);
+ Page.OnFormPostRender (w, ClientID);
+ }
+
+#if NET_2_0
+ /* According to corcompare */
+ [MonoTODO ("why override?")]
+ 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);
+ }
+ }
+}
+
+