Initial project's source code check-in.
This commit is contained in:
commit
b03b0b373f
4573 changed files with 981205 additions and 0 deletions
|
@ -0,0 +1,453 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class ChangePasswordAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
||||
{
|
||||
private enum State {
|
||||
ChangePassword,
|
||||
Failed,
|
||||
Success,
|
||||
}
|
||||
State _state = State.ChangePassword;
|
||||
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
public ChangePasswordAdapter()
|
||||
{
|
||||
_state = State.ChangePassword;
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PROTECTED
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
ChangePassword changePwd = Control as ChangePassword;
|
||||
if (Extender.AdapterEnabled && (changePwd != null))
|
||||
{
|
||||
RegisterScripts();
|
||||
changePwd.ChangedPassword += OnChangedPassword;
|
||||
changePwd.ChangePasswordError += OnChangePasswordError;
|
||||
_state = State.ChangePassword;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void CreateChildControls()
|
||||
{
|
||||
base.CreateChildControls();
|
||||
|
||||
ChangePassword changePwd = Control as ChangePassword;
|
||||
if (changePwd != null)
|
||||
{
|
||||
if (changePwd.ChangePasswordTemplate != null)
|
||||
{
|
||||
changePwd.ChangePasswordTemplateContainer.Controls.Clear();
|
||||
changePwd.ChangePasswordTemplate.InstantiateIn(changePwd.ChangePasswordTemplateContainer);
|
||||
changePwd.ChangePasswordTemplateContainer.DataBind();
|
||||
}
|
||||
|
||||
if (changePwd.SuccessTemplate != null)
|
||||
{
|
||||
changePwd.SuccessTemplateContainer.Controls.Clear();
|
||||
changePwd.SuccessTemplate.InstantiateIn(changePwd.SuccessTemplateContainer);
|
||||
changePwd.SuccessTemplateContainer.DataBind();
|
||||
}
|
||||
|
||||
changePwd.Controls.Add(new ChangePasswordCommandBubbler());
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnChangedPassword(object sender, EventArgs e)
|
||||
{
|
||||
_state = State.Success;
|
||||
}
|
||||
|
||||
protected void OnChangePasswordError(object sender, EventArgs e)
|
||||
{
|
||||
if (_state != State.Success)
|
||||
{
|
||||
_state = State.Failed;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, "AspNet-ChangePassword");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
ChangePassword changePwd = Control as ChangePassword;
|
||||
if (changePwd != null)
|
||||
{
|
||||
if ((_state == State.ChangePassword) || (_state == State.Failed))
|
||||
{
|
||||
if (changePwd.ChangePasswordTemplate != null)
|
||||
{
|
||||
changePwd.ChangePasswordTemplateContainer.RenderControl(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteChangePasswordTitlePanel(writer, changePwd);
|
||||
WriteInstructionPanel(writer, changePwd);
|
||||
WriteHelpPanel(writer, changePwd);
|
||||
WriteUserPanel(writer, changePwd);
|
||||
WritePasswordPanel(writer, changePwd);
|
||||
WriteNewPasswordPanel(writer, changePwd);
|
||||
WriteConfirmNewPasswordPanel(writer, changePwd);
|
||||
if (_state == State.Failed)
|
||||
{
|
||||
WriteFailurePanel(writer, changePwd);
|
||||
}
|
||||
WriteSubmitPanel(writer, changePwd);
|
||||
WriteCreateUserPanel(writer, changePwd);
|
||||
WritePasswordRecoveryPanel(writer, changePwd);
|
||||
}
|
||||
}
|
||||
else if (_state == State.Success)
|
||||
{
|
||||
if (changePwd.SuccessTemplate != null)
|
||||
{
|
||||
changePwd.SuccessTemplateContainer.RenderControl(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteSuccessTitlePanel(writer, changePwd);
|
||||
WriteSuccessTextPanel(writer, changePwd);
|
||||
WriteContinuePanel(writer, changePwd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PRIVATE
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// Step 1: change password
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
private void WriteChangePasswordTitlePanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(changePwd.ChangePasswordTitleText))
|
||||
{
|
||||
string className = (changePwd.TitleTextStyle != null) && (!String.IsNullOrEmpty(changePwd.TitleTextStyle.CssClass)) ? changePwd.TitleTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-ChangePassword-ChangePasswordTitlePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", changePwd.ChangePasswordTitleText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteInstructionPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(changePwd.InstructionText))
|
||||
{
|
||||
string className = (changePwd.InstructionTextStyle != null) && (!String.IsNullOrEmpty(changePwd.InstructionTextStyle.CssClass)) ? changePwd.InstructionTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-ChangePassword-InstructionPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", changePwd.InstructionText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteFailurePanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
string className = (changePwd.FailureTextStyle != null) && (!String.IsNullOrEmpty(changePwd.FailureTextStyle.CssClass)) ? changePwd.FailureTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-ChangePassword-FailurePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", changePwd.ChangePasswordFailureText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
|
||||
private void WriteHelpPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(changePwd.HelpPageIconUrl)) || (!String.IsNullOrEmpty(changePwd.HelpPageText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-HelpPanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, changePwd.HelpPageIconUrl, "Help");
|
||||
WebControlAdapterExtender.WriteLink(writer, changePwd.HyperLinkStyle.CssClass, changePwd.HelpPageUrl, "Help", changePwd.HelpPageText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteUserPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
if (changePwd.DisplayUserName)
|
||||
{
|
||||
TextBox textbox = changePwd.ChangePasswordTemplateContainer.FindControl("UserName") as TextBox;
|
||||
if (textbox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textbox.UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-UserPanel");
|
||||
Extender.WriteTextBox(writer, false, changePwd.LabelStyle.CssClass, changePwd.UserNameLabelText, changePwd.TextBoxStyle.CssClass, changePwd.ChangePasswordTemplateContainer.ID + "_UserName", changePwd.UserName);
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, changePwd.ChangePasswordTemplateContainer.FindControl("UserNameRequired") as RequiredFieldValidator, changePwd.ValidatorTextStyle.CssClass, "UserName", changePwd.UserNameRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WritePasswordPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
TextBox textbox = changePwd.ChangePasswordTemplateContainer.FindControl("CurrentPassword") as TextBox;
|
||||
if (textbox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textbox.UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-PasswordPanel");
|
||||
Extender.WriteTextBox(writer, true, changePwd.LabelStyle.CssClass, changePwd.PasswordLabelText, changePwd.TextBoxStyle.CssClass, changePwd.ChangePasswordTemplateContainer.ID + "_CurrentPassword", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, changePwd.ChangePasswordTemplateContainer.FindControl("CurrentPasswordRequired") as RequiredFieldValidator, changePwd.ValidatorTextStyle.CssClass, "CurrentPassword", changePwd.PasswordRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteNewPasswordPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
TextBox textbox = changePwd.ChangePasswordTemplateContainer.FindControl("NewPassword") as TextBox;
|
||||
if (textbox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textbox.UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-NewPasswordPanel");
|
||||
Extender.WriteTextBox(writer, true, changePwd.LabelStyle.CssClass, changePwd.NewPasswordLabelText, changePwd.TextBoxStyle.CssClass, changePwd.ChangePasswordTemplateContainer.ID + "_NewPassword", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, changePwd.ChangePasswordTemplateContainer.FindControl("NewPasswordRequired") as RequiredFieldValidator, changePwd.ValidatorTextStyle.CssClass, "NewPassword", changePwd.NewPasswordRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteRegularExpressionValidator(writer, changePwd.ChangePasswordTemplateContainer.FindControl("RegExpValidator") as RegularExpressionValidator, changePwd.ValidatorTextStyle.CssClass, "NewPassword", changePwd.NewPasswordRegularExpressionErrorMessage, changePwd.NewPasswordRegularExpression);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteConfirmNewPasswordPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
TextBox textbox = changePwd.ChangePasswordTemplateContainer.FindControl("ConfirmNewPassword") as TextBox;
|
||||
if (textbox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textbox.UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-ConfirmNewPasswordPanel");
|
||||
Extender.WriteTextBox(writer, true, changePwd.LabelStyle.CssClass, changePwd.ConfirmNewPasswordLabelText, changePwd.TextBoxStyle.CssClass, changePwd.ChangePasswordTemplateContainer.ID + "_ConfirmNewPassword", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, changePwd.ChangePasswordTemplateContainer.FindControl("ConfirmNewPasswordRequired") as RequiredFieldValidator, changePwd.ValidatorTextStyle.CssClass, "ConfirmNewPassword", changePwd.ConfirmPasswordRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteCompareValidator(writer, changePwd.ChangePasswordTemplateContainer.FindControl("NewPasswordCompare") as CompareValidator, changePwd.ValidatorTextStyle.CssClass, "ConfirmNewPassword", changePwd.ConfirmPasswordCompareErrorMessage, "NewPassword");
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteSubmitPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-SubmitPanel");
|
||||
|
||||
string id = "ChangePassword";
|
||||
id += (changePwd.ChangePasswordButtonType == ButtonType.Button) ? "Push" : "";
|
||||
string idWithType = WebControlAdapterExtender.MakeIdWithButtonType(id, changePwd.ChangePasswordButtonType);
|
||||
Control btn = changePwd.ChangePasswordTemplateContainer.FindControl(idWithType);
|
||||
if (btn != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
||||
|
||||
PostBackOptions options = new PostBackOptions(btn, "", "", false, false, false, false, true, changePwd.UniqueID);
|
||||
string javascript = "javascript:" + Page.ClientScript.GetPostBackEventReference(options);
|
||||
javascript = Page.Server.HtmlEncode(javascript);
|
||||
|
||||
Extender.WriteSubmit(writer, changePwd.ChangePasswordButtonType, changePwd.ChangePasswordButtonStyle.CssClass, changePwd.ChangePasswordTemplateContainer.ID + "_" + id, changePwd.ChangePasswordButtonImageUrl, javascript, changePwd.ChangePasswordButtonText);
|
||||
}
|
||||
|
||||
id = "Cancel";
|
||||
id += (changePwd.ChangePasswordButtonType == ButtonType.Button) ? "Push" : "";
|
||||
idWithType = WebControlAdapterExtender.MakeIdWithButtonType(id, changePwd.CancelButtonType);
|
||||
btn = changePwd.ChangePasswordTemplateContainer.FindControl(idWithType);
|
||||
if (btn != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
||||
Extender.WriteSubmit(writer, changePwd.CancelButtonType, changePwd.CancelButtonStyle.CssClass, changePwd.ChangePasswordTemplateContainer.ID + "_" + id, changePwd.CancelButtonImageUrl, "", changePwd.CancelButtonText);
|
||||
}
|
||||
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
|
||||
private void WriteCreateUserPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(changePwd.CreateUserUrl)) || (!String.IsNullOrEmpty(changePwd.CreateUserText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-CreateUserPanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, changePwd.CreateUserIconUrl, "Create user");
|
||||
WebControlAdapterExtender.WriteLink(writer, changePwd.HyperLinkStyle.CssClass, changePwd.CreateUserUrl, "Create user", changePwd.CreateUserText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WritePasswordRecoveryPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(changePwd.PasswordRecoveryUrl)) || (!String.IsNullOrEmpty(changePwd.PasswordRecoveryText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-PasswordRecoveryPanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, changePwd.PasswordRecoveryIconUrl, "Password recovery");
|
||||
WebControlAdapterExtender.WriteLink(writer, changePwd.HyperLinkStyle.CssClass, changePwd.PasswordRecoveryUrl, "Password recovery", changePwd.PasswordRecoveryText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// Step 2: success
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
private void WriteSuccessTitlePanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(changePwd.SuccessTitleText))
|
||||
{
|
||||
string className = (changePwd.TitleTextStyle != null) && (!String.IsNullOrEmpty(changePwd.TitleTextStyle.CssClass)) ? changePwd.TitleTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-ChangePassword-SuccessTitlePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", changePwd.SuccessTitleText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteSuccessTextPanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(changePwd.SuccessText))
|
||||
{
|
||||
string className = (changePwd.SuccessTextStyle != null) && (!String.IsNullOrEmpty(changePwd.SuccessTextStyle.CssClass)) ? changePwd.SuccessTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-ChangePassword-SuccessTextPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", changePwd.SuccessText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteContinuePanel(HtmlTextWriter writer, ChangePassword changePwd)
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-ChangePassword-ContinuePanel");
|
||||
|
||||
string id = "Continue";
|
||||
id += (changePwd.ChangePasswordButtonType == ButtonType.Button) ? "Push" : "";
|
||||
string idWithType = WebControlAdapterExtender.MakeIdWithButtonType(id, changePwd.ContinueButtonType);
|
||||
Control btn = changePwd.SuccessTemplateContainer.FindControl(idWithType);
|
||||
if (btn != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
||||
Extender.WriteSubmit(writer, changePwd.ContinueButtonType, changePwd.ContinueButtonStyle.CssClass, changePwd.SuccessTemplateContainer.ID + "_" + id, changePwd.ContinueButtonImageUrl, "", changePwd.ContinueButtonText);
|
||||
}
|
||||
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
public class ChangePasswordCommandBubbler : Control
|
||||
{
|
||||
protected override void OnPreRender(EventArgs e)
|
||||
{
|
||||
base.OnPreRender(e);
|
||||
if (Page.IsPostBack)
|
||||
{
|
||||
ChangePassword changePassword = NamingContainer as ChangePassword;
|
||||
if (changePassword != null)
|
||||
{
|
||||
Control container = changePassword.ChangePasswordTemplateContainer;
|
||||
if (container != null)
|
||||
{
|
||||
CommandEventArgs cmdArgs = null;
|
||||
String[] prefixes = { "ChangePassword", "Cancel", "Continue" };
|
||||
String[] postfixes = { "PushButton", "Image", "Link" };
|
||||
foreach (string prefix in prefixes)
|
||||
{
|
||||
foreach (string postfix in postfixes)
|
||||
{
|
||||
string id = prefix + postfix;
|
||||
Control ctrl = container.FindControl(id);
|
||||
if ((ctrl != null) && (!String.IsNullOrEmpty(Page.Request.Params.Get(ctrl.UniqueID))))
|
||||
{
|
||||
switch (prefix)
|
||||
{
|
||||
case "ChangePassword":
|
||||
cmdArgs = new CommandEventArgs(ChangePassword.ChangePasswordButtonCommandName, this);
|
||||
break;
|
||||
case "Cancel":
|
||||
cmdArgs = new CommandEventArgs(ChangePassword.CancelButtonCommandName, this);
|
||||
break;
|
||||
case "Continue":
|
||||
cmdArgs = new CommandEventArgs(ChangePassword.ContinueButtonCommandName, this);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (cmdArgs != null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((cmdArgs != null) && (cmdArgs.CommandName == ChangePassword.ChangePasswordButtonCommandName))
|
||||
{
|
||||
Page.Validate();
|
||||
if (!Page.IsValid)
|
||||
{
|
||||
cmdArgs = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (cmdArgs != null)
|
||||
{
|
||||
RaiseBubbleEvent(this, cmdArgs);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,265 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public abstract class CompositeDataBoundControlAdapter : System.Web.UI.WebControls.Adapters.DataBoundControlAdapter
|
||||
{
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
protected string _classMain = "";
|
||||
protected string _classHeader = "";
|
||||
protected string _classData = "";
|
||||
protected string _classFooter = "";
|
||||
protected string _classPagination = "";
|
||||
protected string _classOtherPage = "";
|
||||
protected string _classActivePage = "";
|
||||
|
||||
protected CompositeDataBoundControl View
|
||||
{
|
||||
get { return Control as CompositeDataBoundControl; }
|
||||
}
|
||||
|
||||
protected DetailsView ControlAsDetailsView
|
||||
{
|
||||
get { return Control as DetailsView; }
|
||||
}
|
||||
|
||||
protected bool IsDetailsView
|
||||
{
|
||||
get { return ControlAsDetailsView != null; }
|
||||
}
|
||||
|
||||
protected FormView ControlAsFormView
|
||||
{
|
||||
get { return Control as FormView; }
|
||||
}
|
||||
|
||||
protected bool IsFormView
|
||||
{
|
||||
get { return ControlAsFormView != null; }
|
||||
}
|
||||
|
||||
protected abstract string HeaderText { get; }
|
||||
protected abstract string FooterText { get; }
|
||||
protected abstract ITemplate HeaderTemplate { get; }
|
||||
protected abstract ITemplate FooterTemplate { get; }
|
||||
protected abstract TableRow HeaderRow { get; }
|
||||
protected abstract TableRow FooterRow { get; }
|
||||
protected abstract bool AllowPaging { get; }
|
||||
protected abstract int DataItemCount { get; }
|
||||
protected abstract int DataItemIndex { get; }
|
||||
protected abstract PagerSettings PagerSettings { get; }
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// METHODS
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
RegisterScripts();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, _classMain);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
if (View != null)
|
||||
{
|
||||
writer.Indent++;
|
||||
|
||||
BuildRow(HeaderRow, _classHeader, writer);
|
||||
BuildItem(writer);
|
||||
BuildRow(FooterRow, _classFooter, writer);
|
||||
BuildPaging(writer);
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void BuildItem(HtmlTextWriter writer)
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual void BuildRow(TableRow row, string cssClass, HtmlTextWriter writer)
|
||||
{
|
||||
if (row != null)
|
||||
{
|
||||
// If there isn't any content, don't render anything.
|
||||
|
||||
bool bHasContent = false;
|
||||
TableCell cell = null;
|
||||
for (int iCell = 0; iCell < row.Cells.Count; iCell++)
|
||||
{
|
||||
cell = row.Cells[iCell];
|
||||
if ((!String.IsNullOrEmpty(cell.Text)) || (cell.Controls.Count > 0))
|
||||
{
|
||||
bHasContent = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (bHasContent)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("div");
|
||||
writer.WriteAttribute("class", cssClass);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
|
||||
for (int iCell = 0; iCell < row.Cells.Count; iCell++)
|
||||
{
|
||||
cell = row.Cells[iCell];
|
||||
if (!String.IsNullOrEmpty(cell.Text))
|
||||
{
|
||||
writer.Write(cell.Text);
|
||||
}
|
||||
foreach (Control cellChildControl in cell.Controls)
|
||||
{
|
||||
cellChildControl.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("div");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void BuildPaging(HtmlTextWriter writer)
|
||||
{
|
||||
if (AllowPaging && (DataItemCount > 0))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("div");
|
||||
writer.WriteAttribute("class", _classPagination);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
int iStart = 0;
|
||||
int iEnd = DataItemCount;
|
||||
int nPages = iEnd - iStart + 1;
|
||||
bool bExceededPageButtonCount = nPages > PagerSettings.PageButtonCount;
|
||||
|
||||
if (bExceededPageButtonCount)
|
||||
{
|
||||
iStart = (DataItemIndex / PagerSettings.PageButtonCount) * PagerSettings.PageButtonCount;
|
||||
iEnd = Math.Min(iStart + PagerSettings.PageButtonCount, DataItemCount);
|
||||
}
|
||||
|
||||
writer.WriteLine();
|
||||
|
||||
if (bExceededPageButtonCount && (iStart > 0))
|
||||
{
|
||||
writer.WriteBeginTag("a");
|
||||
writer.WriteAttribute("class", _classOtherPage);
|
||||
writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(Control, "Page$" + iStart.ToString(), true));
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write("...");
|
||||
writer.WriteEndTag("a");
|
||||
}
|
||||
|
||||
for (int iDataItem = iStart; iDataItem < iEnd; iDataItem++)
|
||||
{
|
||||
string strPage = (iDataItem + 1).ToString();
|
||||
if (DataItemIndex == iDataItem)
|
||||
{
|
||||
writer.WriteBeginTag("span");
|
||||
writer.WriteAttribute("class", _classActivePage);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(strPage);
|
||||
writer.WriteEndTag("span");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteBeginTag("a");
|
||||
writer.WriteAttribute("class", _classOtherPage);
|
||||
writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(Control, "Page$" + strPage, true));
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(strPage);
|
||||
writer.WriteEndTag("a");
|
||||
}
|
||||
}
|
||||
|
||||
if (bExceededPageButtonCount && (iEnd < DataItemCount))
|
||||
{
|
||||
writer.WriteBeginTag("a");
|
||||
writer.WriteAttribute("class", _classOtherPage);
|
||||
writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(Control, "Page$" + (iEnd + 1).ToString(), true));
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write("...");
|
||||
writer.WriteEndTag("a");
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("div");
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void RegisterScripts()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,478 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class CreateUserWizardAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
||||
{
|
||||
private enum State
|
||||
{
|
||||
CreateUser,
|
||||
Failed,
|
||||
Success
|
||||
}
|
||||
State _state = State.CreateUser;
|
||||
string _currentErrorText = "";
|
||||
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
private MembershipProvider WizardMembershipProvider
|
||||
{
|
||||
get
|
||||
{
|
||||
MembershipProvider provider = Membership.Provider;
|
||||
CreateUserWizard wizard = Control as CreateUserWizard;
|
||||
if ((wizard != null) && (!String.IsNullOrEmpty(wizard.MembershipProvider)) && (Membership.Providers[wizard.MembershipProvider] != null))
|
||||
{
|
||||
provider = Membership.Providers[wizard.MembershipProvider];
|
||||
}
|
||||
return provider;
|
||||
}
|
||||
}
|
||||
|
||||
public CreateUserWizardAdapter()
|
||||
{
|
||||
_state = State.CreateUser;
|
||||
_currentErrorText = "";
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PROTECTED
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
CreateUserWizard wizard = Control as CreateUserWizard;
|
||||
if (Extender.AdapterEnabled && (wizard != null))
|
||||
{
|
||||
RegisterScripts();
|
||||
wizard.CreatedUser += OnCreatedUser;
|
||||
wizard.CreateUserError += OnCreateUserError;
|
||||
_state = State.CreateUser;
|
||||
_currentErrorText = "";
|
||||
}
|
||||
}
|
||||
|
||||
protected override void CreateChildControls()
|
||||
{
|
||||
base.CreateChildControls();
|
||||
|
||||
CreateUserWizard wizard = Control as CreateUserWizard;
|
||||
if (wizard != null)
|
||||
{
|
||||
TemplatedWizardStep activeStep = wizard.ActiveStep as TemplatedWizardStep;
|
||||
if (activeStep != null)
|
||||
{
|
||||
if ((activeStep.ContentTemplate != null) && (activeStep.Controls.Count == 1))
|
||||
{
|
||||
Control container = activeStep.ContentTemplateContainer;
|
||||
if (container != null)
|
||||
{
|
||||
container.Controls.Clear();
|
||||
activeStep.ContentTemplate.InstantiateIn(container);
|
||||
container.DataBind();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnCreatedUser(object sender, EventArgs e)
|
||||
{
|
||||
_state = State.Success;
|
||||
_currentErrorText = "";
|
||||
}
|
||||
|
||||
protected void OnCreateUserError(object sender, CreateUserErrorEventArgs e)
|
||||
{
|
||||
_state = State.Failed;
|
||||
_currentErrorText = "An error has occurred. Please try again.";
|
||||
|
||||
CreateUserWizard wizard = Control as CreateUserWizard;
|
||||
if (wizard != null)
|
||||
{
|
||||
_currentErrorText = wizard.UnknownErrorMessage;
|
||||
switch (e.CreateUserError)
|
||||
{
|
||||
case MembershipCreateStatus.DuplicateEmail:
|
||||
_currentErrorText = wizard.DuplicateEmailErrorMessage;
|
||||
break;
|
||||
case MembershipCreateStatus.DuplicateUserName:
|
||||
_currentErrorText = wizard.DuplicateUserNameErrorMessage;
|
||||
break;
|
||||
case MembershipCreateStatus.InvalidAnswer:
|
||||
_currentErrorText = wizard.InvalidAnswerErrorMessage;
|
||||
break;
|
||||
case MembershipCreateStatus.InvalidEmail:
|
||||
_currentErrorText = wizard.InvalidEmailErrorMessage;
|
||||
break;
|
||||
case MembershipCreateStatus.InvalidPassword:
|
||||
_currentErrorText = wizard.InvalidPasswordErrorMessage;
|
||||
break;
|
||||
case MembershipCreateStatus.InvalidQuestion:
|
||||
_currentErrorText = wizard.InvalidQuestionErrorMessage;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, "AspNet-CreateUserWizard");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
CreateUserWizard wizard = Control as CreateUserWizard;
|
||||
if (wizard != null)
|
||||
{
|
||||
TemplatedWizardStep activeStep = wizard.ActiveStep as TemplatedWizardStep;
|
||||
if (activeStep != null)
|
||||
{
|
||||
if (activeStep.ContentTemplate != null)
|
||||
{
|
||||
activeStep.RenderControl(writer);
|
||||
|
||||
if (wizard.CreateUserStep.Equals(activeStep))
|
||||
{
|
||||
WriteCreateUserButtonPanel(writer, wizard);
|
||||
}
|
||||
// Might need to add logic here to render nav buttons for other kinds of
|
||||
// steps (besides the CreateUser step, which we handle above).
|
||||
}
|
||||
else if (wizard.CreateUserStep.Equals(activeStep))
|
||||
{
|
||||
WriteHeaderTextPanel(writer, wizard);
|
||||
WriteStepTitlePanel(writer, wizard);
|
||||
WriteInstructionPanel(writer, wizard);
|
||||
WriteHelpPanel(writer, wizard);
|
||||
WriteUserPanel(writer, wizard);
|
||||
WritePasswordPanel(writer, wizard);
|
||||
WritePasswordHintPanel(writer, wizard); //hbb
|
||||
WriteConfirmPasswordPanel(writer, wizard);
|
||||
WriteEmailPanel(writer, wizard);
|
||||
WriteQuestionPanel(writer, wizard);
|
||||
WriteAnswerPanel(writer, wizard);
|
||||
WriteFinalValidators(writer, wizard);
|
||||
if (_state == State.Failed)
|
||||
{
|
||||
WriteFailurePanel(writer, wizard);
|
||||
}
|
||||
WriteCreateUserButtonPanel(writer, wizard);
|
||||
}
|
||||
else if (wizard.CompleteStep.Equals(activeStep))
|
||||
{
|
||||
WriteStepTitlePanel(writer, wizard);
|
||||
WriteSuccessTextPanel(writer, wizard);
|
||||
WriteContinuePanel(writer, wizard);
|
||||
WriteEditProfilePanel(writer, wizard);
|
||||
}
|
||||
else
|
||||
{
|
||||
System.Diagnostics.Debug.Fail("The adapter isn't equipped to handle a CreateUserWizard with a step that is neither templated nor either the CreateUser step or the Complete step.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PRIVATE
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// Step 1: Create user step
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
private void WriteHeaderTextPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(wizard.HeaderText))
|
||||
{
|
||||
string className = (wizard.HeaderStyle != null) && (!String.IsNullOrEmpty(wizard.HeaderStyle.CssClass)) ? wizard.HeaderStyle.CssClass + " " : "";
|
||||
className += "AspNet-CreateUserWizard-HeaderTextPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", wizard.HeaderText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteStepTitlePanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(wizard.ActiveStep.Title))
|
||||
{
|
||||
string className = (wizard.TitleTextStyle != null) && (!String.IsNullOrEmpty(wizard.TitleTextStyle.CssClass)) ? wizard.TitleTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-CreateUserWizard-StepTitlePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", wizard.ActiveStep.Title);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteInstructionPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(wizard.InstructionText))
|
||||
{
|
||||
string className = (wizard.InstructionTextStyle != null) && (!String.IsNullOrEmpty(wizard.InstructionTextStyle.CssClass)) ? wizard.InstructionTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-CreateUserWizard-InstructionPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", wizard.InstructionText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteFailurePanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
string className = (wizard.ErrorMessageStyle != null) && (!String.IsNullOrEmpty(wizard.ErrorMessageStyle.CssClass)) ? wizard.ErrorMessageStyle.CssClass + " " : "";
|
||||
className += "AspNet-CreateUserWizard-FailurePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", _currentErrorText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
|
||||
private void WriteHelpPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(wizard.HelpPageIconUrl)) || (!String.IsNullOrEmpty(wizard.HelpPageText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-HelpPanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, wizard.HelpPageIconUrl, "Help");
|
||||
WebControlAdapterExtender.WriteLink(writer, wizard.HyperLinkStyle.CssClass, wizard.HelpPageUrl, "Help", wizard.HelpPageText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteUserPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
TextBox textBox = wizard.FindControl("CreateUserStepContainer").FindControl("UserName") as TextBox;
|
||||
if (textBox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textBox.UniqueID);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-UserPanel");
|
||||
Extender.WriteTextBox(writer, false, wizard.LabelStyle.CssClass, wizard.UserNameLabelText, wizard.TextBoxStyle.CssClass, "CreateUserStepContainer_UserName", wizard.UserName);
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("UserNameRequired") as RequiredFieldValidator, wizard.ValidatorTextStyle.CssClass, "UserName", wizard.UserNameRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WritePasswordPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
TextBox textBox = wizard.FindControl("CreateUserStepContainer").FindControl("Password") as TextBox;
|
||||
if (textBox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textBox.UniqueID);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-PasswordPanel");
|
||||
Extender.WriteTextBox(writer, true, wizard.LabelStyle.CssClass, wizard.PasswordLabelText, wizard.TextBoxStyle.CssClass, "CreateUserStepContainer_Password", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("PasswordRequired") as RequiredFieldValidator, wizard.ValidatorTextStyle.CssClass, "Password", wizard.PasswordRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void WritePasswordHintPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(wizard.PasswordHintText))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-PasswordHintPanel");
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", wizard.PasswordHintText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteConfirmPasswordPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
TextBox textBox = wizard.FindControl("CreateUserStepContainer").FindControl("ConfirmPassword") as TextBox;
|
||||
if (textBox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textBox.UniqueID);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-ConfirmPasswordPanel");
|
||||
Extender.WriteTextBox(writer, true, wizard.LabelStyle.CssClass, wizard.ConfirmPasswordLabelText, wizard.TextBoxStyle.CssClass, "CreateUserStepContainer_ConfirmPassword", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("ConfirmPasswordRequired") as RequiredFieldValidator, wizard.ValidatorTextStyle.CssClass, "ConfirmPassword", wizard.ConfirmPasswordRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteEmailPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
TextBox textBox = wizard.FindControl("CreateUserStepContainer").FindControl("Email") as TextBox;
|
||||
if (textBox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textBox.UniqueID);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-EmailPanel");
|
||||
Extender.WriteTextBox(writer, false, wizard.LabelStyle.CssClass, wizard.EmailLabelText, wizard.TextBoxStyle.CssClass, "CreateUserStepContainer_Email", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("EmailRequired") as RequiredFieldValidator, wizard.ValidatorTextStyle.CssClass, "Email", wizard.EmailRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteQuestionPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if ((WizardMembershipProvider != null) && WizardMembershipProvider.RequiresQuestionAndAnswer)
|
||||
{
|
||||
TextBox textBox = wizard.FindControl("CreateUserStepContainer").FindControl("Question") as TextBox;
|
||||
if (textBox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textBox.UniqueID);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-QuestionPanel");
|
||||
Extender.WriteTextBox(writer, false, wizard.LabelStyle.CssClass, wizard.QuestionLabelText, wizard.TextBoxStyle.CssClass, "CreateUserStepContainer_Question", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("QuestionRequired") as RequiredFieldValidator, wizard.ValidatorTextStyle.CssClass, "Question", wizard.QuestionRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteAnswerPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if ((WizardMembershipProvider != null) && WizardMembershipProvider.RequiresQuestionAndAnswer)
|
||||
{
|
||||
TextBox textBox = wizard.FindControl("CreateUserStepContainer").FindControl("Answer") as TextBox;
|
||||
if (textBox != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textBox.UniqueID);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-AnswerPanel");
|
||||
Extender.WriteTextBox(writer, false, wizard.LabelStyle.CssClass, wizard.AnswerLabelText, wizard.TextBoxStyle.CssClass, "CreateUserStepContainer_Answer", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("AnswerRequired") as RequiredFieldValidator, wizard.ValidatorTextStyle.CssClass, "Answer", wizard.AnswerRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteFinalValidators(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-FinalValidatorsPanel");
|
||||
WebControlAdapterExtender.WriteCompareValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("PasswordCompare") as CompareValidator, wizard.ValidatorTextStyle.CssClass, "ConfirmPassword", wizard.ConfirmPasswordCompareErrorMessage, "Password");
|
||||
WebControlAdapterExtender.WriteRegularExpressionValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("PasswordRegExpValidator") as RegularExpressionValidator, wizard.ValidatorTextStyle.CssClass, "Password", wizard.PasswordRegularExpressionErrorMessage, wizard.PasswordRegularExpression);
|
||||
WebControlAdapterExtender.WriteRegularExpressionValidator(writer, wizard.FindControl("CreateUserStepContainer").FindControl("EmailRegExpValidator") as RegularExpressionValidator, wizard.ValidatorTextStyle.CssClass, "Email", wizard.EmailRegularExpressionErrorMessage, wizard.EmailRegularExpression);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
|
||||
private void WriteCreateUserButtonPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
Control btnParentCtrl = wizard.FindControl("__CustomNav0");
|
||||
if (btnParentCtrl != null)
|
||||
{
|
||||
string id = "_CustomNav0_StepNextButton";
|
||||
string idWithType = WebControlAdapterExtender.MakeIdWithButtonType("StepNextButton", wizard.CreateUserButtonType);
|
||||
Control btn = btnParentCtrl.FindControl(idWithType);
|
||||
if (btn != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
||||
|
||||
PostBackOptions options = new PostBackOptions(btn, "", "", false, false, false, false, true, wizard.ID);
|
||||
string javascript = "javascript:" + Page.ClientScript.GetPostBackEventReference(options);
|
||||
javascript = Page.Server.HtmlEncode(javascript);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-CreateUserButtonPanel");
|
||||
|
||||
Extender.WriteSubmit(writer, wizard.CreateUserButtonType, wizard.CreateUserButtonStyle.CssClass, id, wizard.CreateUserButtonImageUrl, javascript, wizard.CreateUserButtonText);
|
||||
|
||||
if (wizard.DisplayCancelButton)
|
||||
{
|
||||
Extender.WriteSubmit(writer, wizard.CancelButtonType, wizard.CancelButtonStyle.CssClass, "_CustomNav0_CancelButton", wizard.CancelButtonImageUrl, "", wizard.CancelButtonText);
|
||||
}
|
||||
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// Complete step
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
private void WriteSuccessTextPanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(wizard.CompleteSuccessText))
|
||||
{
|
||||
string className = (wizard.CompleteSuccessTextStyle != null) && (!String.IsNullOrEmpty(wizard.CompleteSuccessTextStyle.CssClass)) ? wizard.CompleteSuccessTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-CreateUserWizard-SuccessTextPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", wizard.CompleteSuccessText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteContinuePanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
string id = "ContinueButton";
|
||||
string idWithType = WebControlAdapterExtender.MakeIdWithButtonType(id, wizard.ContinueButtonType);
|
||||
Control btn = wizard.FindControl("CompleteStepContainer").FindControl(idWithType);
|
||||
if (btn != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-ContinuePanel");
|
||||
Extender.WriteSubmit(writer, wizard.ContinueButtonType, wizard.ContinueButtonStyle.CssClass, "CompleteStepContainer_ContinueButton", wizard.ContinueButtonImageUrl, "", wizard.ContinueButtonText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteEditProfilePanel(HtmlTextWriter writer, CreateUserWizard wizard)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(wizard.EditProfileUrl)) || (!String.IsNullOrEmpty(wizard.EditProfileText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-CreateUserWizard-EditProfilePanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, wizard.EditProfileIconUrl, "Edit profile");
|
||||
WebControlAdapterExtender.WriteLink(writer, wizard.HyperLinkStyle.CssClass, wizard.EditProfileUrl, "EditProfile", wizard.EditProfileText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,281 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class DataListAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
||||
{
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
private int RepeatColumns
|
||||
{
|
||||
get
|
||||
{
|
||||
DataList dataList = Control as DataList;
|
||||
int nRet = 1;
|
||||
if (dataList != null)
|
||||
{
|
||||
if (dataList.RepeatColumns == 0)
|
||||
{
|
||||
if (dataList.RepeatDirection == RepeatDirection.Horizontal)
|
||||
{
|
||||
nRet = dataList.Items.Count;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
nRet = dataList.RepeatColumns;
|
||||
}
|
||||
}
|
||||
return nRet;
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PROTECTED
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
RegisterScripts();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, "AspNet-DataList");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
DataList dataList = Control as DataList;
|
||||
if (dataList != null)
|
||||
{
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("table");
|
||||
writer.WriteAttribute("cellpadding", "0");
|
||||
writer.WriteAttribute("cellspacing", "0");
|
||||
writer.WriteAttribute("summary", Control.ToolTip);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
if (dataList.HeaderTemplate != null)
|
||||
{
|
||||
PlaceHolder container = new PlaceHolder();
|
||||
dataList.HeaderTemplate.InstantiateIn(container);
|
||||
container.DataBind();
|
||||
|
||||
if ((container.Controls.Count == 1) && typeof(LiteralControl).IsInstanceOfType(container.Controls[0]))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("caption");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
|
||||
LiteralControl literalControl = container.Controls[0] as LiteralControl;
|
||||
writer.Write(literalControl.Text.Trim());
|
||||
|
||||
writer.WriteEndTag("caption");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("thead");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("tr");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("th");
|
||||
writer.WriteAttribute("colspan", RepeatColumns.ToString());
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
writer.WriteLine();
|
||||
container.RenderControl(writer);
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("th");
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("tr");
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("thead");
|
||||
}
|
||||
}
|
||||
|
||||
if (dataList.FooterTemplate != null)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("tfoot");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("tr");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("td");
|
||||
writer.WriteAttribute("colspan", RepeatColumns.ToString());
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
PlaceHolder container = new PlaceHolder();
|
||||
dataList.FooterTemplate.InstantiateIn(container);
|
||||
container.DataBind();
|
||||
container.RenderControl(writer);
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("td");
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("tr");
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("tfoot");
|
||||
}
|
||||
|
||||
if (dataList.ItemTemplate != null)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("tbody");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
int nItemsInColumn = (int)Math.Ceiling(((Double)dataList.Items.Count) / ((Double)RepeatColumns));
|
||||
for (int iItem = 0; iItem < dataList.Items.Count; iItem++)
|
||||
{
|
||||
int nRow = iItem / RepeatColumns;
|
||||
int nCol = iItem % RepeatColumns;
|
||||
int nDesiredIndex = iItem;
|
||||
if (dataList.RepeatDirection == RepeatDirection.Vertical)
|
||||
{
|
||||
nDesiredIndex = (nCol * nItemsInColumn) + nRow;
|
||||
}
|
||||
|
||||
if ((iItem % RepeatColumns) == 0)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("tr");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
}
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("td");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
foreach (Control itemCtrl in dataList.Items[iItem].Controls)
|
||||
{
|
||||
itemCtrl.RenderControl(writer);
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("td");
|
||||
|
||||
if (((iItem + 1) % RepeatColumns) == 0)
|
||||
{
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("tr");
|
||||
}
|
||||
}
|
||||
|
||||
if ((dataList.Items.Count % RepeatColumns) != 0)
|
||||
{
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("tr");
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("tbody");
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("table");
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PRIVATE
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,132 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class DetailsViewAdapter : CompositeDataBoundControlAdapter
|
||||
{
|
||||
protected override string HeaderText { get { return ControlAsDetailsView.HeaderText; } }
|
||||
protected override string FooterText { get { return ControlAsDetailsView.FooterText; } }
|
||||
protected override ITemplate HeaderTemplate { get { return ControlAsDetailsView.HeaderTemplate; } }
|
||||
protected override ITemplate FooterTemplate { get { return ControlAsDetailsView.FooterTemplate; } }
|
||||
protected override TableRow HeaderRow { get { return ControlAsDetailsView.HeaderRow; } }
|
||||
protected override TableRow FooterRow { get { return ControlAsDetailsView.FooterRow; } }
|
||||
protected override bool AllowPaging { get { return ControlAsDetailsView.AllowPaging; } }
|
||||
protected override int DataItemCount { get { return ControlAsDetailsView.DataItemCount; } }
|
||||
protected override int DataItemIndex { get { return ControlAsDetailsView.DataItemIndex; } }
|
||||
protected override PagerSettings PagerSettings { get { return ControlAsDetailsView.PagerSettings; } }
|
||||
|
||||
public DetailsViewAdapter()
|
||||
{
|
||||
_classMain = "AspNet-DetailsView";
|
||||
_classHeader = "AspNet-DetailsView-Header";
|
||||
_classData = "AspNet-DetailsView-Data";
|
||||
_classFooter = "AspNet-DetailsView-Footer";
|
||||
_classPagination = "AspNet-DetailsView-Pagination";
|
||||
_classOtherPage = "AspNet-DetailsView-OtherPage";
|
||||
_classActivePage = "AspNet-DetailsView-ActivePage";
|
||||
}
|
||||
|
||||
protected override void BuildItem(HtmlTextWriter writer)
|
||||
{
|
||||
if (IsDetailsView && (ControlAsDetailsView.Rows.Count > 0))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("div");
|
||||
writer.WriteAttribute("class", _classData);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("ul");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
int countRenderedRows = 0;
|
||||
for (int iRow = 0; iRow < ControlAsDetailsView.Rows.Count; iRow++)
|
||||
{
|
||||
if (ControlAsDetailsView.Fields[iRow].Visible)
|
||||
{
|
||||
DetailsViewRow row = ControlAsDetailsView.Rows[iRow];
|
||||
if ((!ControlAsDetailsView.AutoGenerateRows) &&
|
||||
((row.RowState & DataControlRowState.Insert) == DataControlRowState.Insert) &&
|
||||
(!ControlAsDetailsView.Fields[row.RowIndex].InsertVisible))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("li");
|
||||
string theClass = ((countRenderedRows % 2) == 1) ? "AspNet-DetailsView-Alternate" : "";
|
||||
if ((ControlAsDetailsView.Fields[iRow].ItemStyle != null) && (!String.IsNullOrEmpty(ControlAsDetailsView.Fields[iRow].ItemStyle.CssClass)))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(theClass))
|
||||
{
|
||||
theClass += " ";
|
||||
}
|
||||
theClass += ControlAsDetailsView.Fields[iRow].ItemStyle.CssClass;
|
||||
}
|
||||
if (!String.IsNullOrEmpty(theClass))
|
||||
{
|
||||
writer.WriteAttribute("class", theClass);
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
|
||||
for (int iCell = 0; iCell < row.Cells.Count; iCell++)
|
||||
{
|
||||
TableCell cell = row.Cells[iCell];
|
||||
writer.WriteBeginTag("span");
|
||||
if (iCell == 0)
|
||||
{
|
||||
writer.WriteAttribute("class", "AspNet-DetailsView-Name");
|
||||
}
|
||||
else if (iCell == 1)
|
||||
{
|
||||
writer.WriteAttribute("class", "AspNet-DetailsView-Value");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteAttribute("class", "AspNet-DetailsView-Misc");
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
if (!String.IsNullOrEmpty(cell.Text))
|
||||
{
|
||||
writer.Write(cell.Text);
|
||||
}
|
||||
foreach (Control cellChildControl in cell.Controls)
|
||||
{
|
||||
cellChildControl.RenderControl(writer);
|
||||
}
|
||||
writer.WriteEndTag("span");
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("li");
|
||||
countRenderedRows++;
|
||||
}
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("ul");
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("div");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class FormViewAdapter : CompositeDataBoundControlAdapter
|
||||
{
|
||||
protected override string HeaderText { get { return ControlAsFormView.HeaderText; } }
|
||||
protected override string FooterText { get { return ControlAsFormView.FooterText; } }
|
||||
protected override ITemplate HeaderTemplate { get { return ControlAsFormView.HeaderTemplate; } }
|
||||
protected override ITemplate FooterTemplate { get { return ControlAsFormView.FooterTemplate; } }
|
||||
protected override TableRow HeaderRow { get { return ControlAsFormView.HeaderRow; } }
|
||||
protected override TableRow FooterRow { get { return ControlAsFormView.FooterRow; } }
|
||||
protected override bool AllowPaging { get { return ControlAsFormView.AllowPaging; } }
|
||||
protected override int DataItemCount { get { return ControlAsFormView.DataItemCount; } }
|
||||
protected override int DataItemIndex { get { return ControlAsFormView.DataItemIndex; } }
|
||||
protected override PagerSettings PagerSettings { get { return ControlAsFormView.PagerSettings; } }
|
||||
|
||||
public FormViewAdapter()
|
||||
{
|
||||
_classMain = "AspNet-FormView";
|
||||
_classHeader = "AspNet-FormView-Header";
|
||||
_classData = "AspNet-FormView-Data";
|
||||
_classFooter = "AspNet-FormView-Footer";
|
||||
_classPagination = "AspNet-FormView-Pagination";
|
||||
_classOtherPage = "AspNet-FormView-OtherPage";
|
||||
_classActivePage = "AspNet-FormView-ActivePage";
|
||||
}
|
||||
|
||||
protected override void BuildItem(HtmlTextWriter writer)
|
||||
{
|
||||
if ((ControlAsFormView.Row != null) &&
|
||||
(ControlAsFormView.Row.Cells.Count > 0) &&
|
||||
(ControlAsFormView.Row.Cells[0].Controls.Count > 0))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("div");
|
||||
writer.WriteAttribute("class", _classData);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
|
||||
foreach (Control itemCtrl in ControlAsFormView.Row.Cells[0].Controls)
|
||||
{
|
||||
itemCtrl.RenderControl(writer);
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("div");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,341 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class GridViewAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
||||
{
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PROTECTED
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
RegisterScripts();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, "AspNet-GridView");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
GridView gridView = Control as GridView;
|
||||
if (gridView != null)
|
||||
{
|
||||
writer.Indent++;
|
||||
WritePagerSection(writer, PagerPosition.Top);
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("table");
|
||||
writer.WriteAttribute("id", gridView.ClientID);
|
||||
writer.WriteAttribute("cellpadding", "0");
|
||||
writer.WriteAttribute("cellspacing", "0");
|
||||
writer.WriteAttribute("summary", Control.ToolTip);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
ArrayList rows = new ArrayList();
|
||||
GridViewRowCollection gvrc = null;
|
||||
|
||||
///////////////////// HEAD /////////////////////////////
|
||||
|
||||
rows.Clear();
|
||||
if (gridView.ShowHeader && (gridView.HeaderRow != null))
|
||||
{
|
||||
rows.Add(gridView.HeaderRow);
|
||||
}
|
||||
gvrc = new GridViewRowCollection(rows);
|
||||
WriteRows(writer, gridView, gvrc, "thead");
|
||||
|
||||
///////////////////// FOOT /////////////////////////////
|
||||
|
||||
rows.Clear();
|
||||
if (gridView.ShowFooter && (gridView.FooterRow != null))
|
||||
{
|
||||
rows.Add(gridView.FooterRow);
|
||||
}
|
||||
gvrc = new GridViewRowCollection(rows);
|
||||
WriteRows(writer, gridView, gvrc, "tfoot");
|
||||
|
||||
///////////////////// BODY /////////////////////////////
|
||||
|
||||
WriteRows(writer, gridView, gridView.Rows, "tbody");
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("table");
|
||||
|
||||
WriteEmptyTextSection(writer);
|
||||
WritePagerSection(writer, PagerPosition.Bottom);
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PRIVATE
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
}
|
||||
|
||||
private void WriteRows(HtmlTextWriter writer, GridView gridView, GridViewRowCollection rows, string tableSection)
|
||||
{
|
||||
if (rows.Count > 0)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag(tableSection);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
foreach (GridViewRow row in rows)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("tr");
|
||||
|
||||
string className = GetRowClass(gridView, row);
|
||||
if (!String.IsNullOrEmpty(className))
|
||||
{
|
||||
writer.WriteAttribute("class", className);
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
int i = 0;
|
||||
foreach (TableCell cell in row.Cells)
|
||||
{
|
||||
if (!gridView.Columns[i++].Visible)
|
||||
continue;
|
||||
|
||||
DataControlFieldCell fieldCell = cell as DataControlFieldCell;
|
||||
|
||||
if(tableSection == "tbody" && fieldCell != null
|
||||
&& (fieldCell.Text.Trim() == "") && fieldCell.Controls.Count == 0)
|
||||
cell.Controls.Add(new LiteralControl("<div style=\"width:1px;height:1px;\"> </div>"));
|
||||
else if (tableSection == "thead" && fieldCell != null
|
||||
&& !String.IsNullOrEmpty(gridView.SortExpression)
|
||||
&& fieldCell.ContainingField.SortExpression == gridView.SortExpression)
|
||||
{
|
||||
cell.Attributes["class"] = "AspNet-GridView-Sort";
|
||||
}
|
||||
|
||||
if ((fieldCell != null) && (fieldCell.ContainingField != null))
|
||||
{
|
||||
DataControlField field = fieldCell.ContainingField;
|
||||
if (!field.Visible)
|
||||
{
|
||||
cell.Visible = false;
|
||||
}
|
||||
|
||||
if (field.ItemStyle.Width != Unit.Empty)
|
||||
cell.Style["width"] = field.ItemStyle.Width.ToString();
|
||||
|
||||
if (!field.ItemStyle.Wrap)
|
||||
cell.Style["white-space"] = "nowrap";
|
||||
|
||||
if ((field.ItemStyle != null) && (!String.IsNullOrEmpty(field.ItemStyle.CssClass)))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(cell.CssClass))
|
||||
{
|
||||
cell.CssClass += " ";
|
||||
}
|
||||
cell.CssClass += field.ItemStyle.CssClass;
|
||||
}
|
||||
}
|
||||
|
||||
writer.WriteLine();
|
||||
cell.RenderControl(writer);
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("tr");
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag(tableSection);
|
||||
}
|
||||
}
|
||||
|
||||
private string GetRowClass(GridView gridView, GridViewRow row)
|
||||
{
|
||||
string className = "";
|
||||
|
||||
if ((row.RowState & DataControlRowState.Alternate) == DataControlRowState.Alternate)
|
||||
{
|
||||
className += " AspNet-GridView-Alternate ";
|
||||
if (gridView.AlternatingRowStyle != null)
|
||||
{
|
||||
className += gridView.AlternatingRowStyle.CssClass;
|
||||
}
|
||||
}
|
||||
|
||||
if ((row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
|
||||
{
|
||||
className += " AspNet-GridView-Edit ";
|
||||
if (gridView.EditRowStyle != null)
|
||||
{
|
||||
className += gridView.EditRowStyle.CssClass;
|
||||
}
|
||||
}
|
||||
|
||||
if ((row.RowState & DataControlRowState.Insert) == DataControlRowState.Insert)
|
||||
{
|
||||
className += " AspNet-GridView-Insert ";
|
||||
}
|
||||
|
||||
if ((row.RowState & DataControlRowState.Selected) == DataControlRowState.Selected)
|
||||
{
|
||||
className += " AspNet-GridView-Selected ";
|
||||
if (gridView.SelectedRowStyle != null)
|
||||
{
|
||||
className += gridView.SelectedRowStyle.CssClass;
|
||||
}
|
||||
}
|
||||
|
||||
return className.Trim();
|
||||
}
|
||||
|
||||
private void WriteEmptyTextSection(HtmlTextWriter writer)
|
||||
{
|
||||
GridView gridView = Control as GridView;
|
||||
if (gridView != null && gridView.Rows.Count == 0)
|
||||
{
|
||||
string className = "AspNet-GridView-Empty";
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("div");
|
||||
writer.WriteAttribute("class", className);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
writer.Write(gridView.EmptyDataText);
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("div");
|
||||
}
|
||||
}
|
||||
|
||||
private void WritePagerSection(HtmlTextWriter writer, PagerPosition pos)
|
||||
{
|
||||
GridView gridView = Control as GridView;
|
||||
if ((gridView != null) &&
|
||||
gridView.AllowPaging &&
|
||||
((gridView.PagerSettings.Position == pos) || (gridView.PagerSettings.Position == PagerPosition.TopAndBottom)))
|
||||
{
|
||||
Table innerTable = null;
|
||||
if ((pos == PagerPosition.Top) &&
|
||||
(gridView.TopPagerRow != null) &&
|
||||
(gridView.TopPagerRow.Cells.Count == 1) &&
|
||||
(gridView.TopPagerRow.Cells[0].Controls.Count == 1) &&
|
||||
typeof(Table).IsAssignableFrom(gridView.TopPagerRow.Cells[0].Controls[0].GetType()))
|
||||
{
|
||||
innerTable = gridView.TopPagerRow.Cells[0].Controls[0] as Table;
|
||||
}
|
||||
else if ((pos == PagerPosition.Bottom) &&
|
||||
(gridView.BottomPagerRow != null) &&
|
||||
(gridView.BottomPagerRow.Cells.Count == 1) &&
|
||||
(gridView.BottomPagerRow.Cells[0].Controls.Count == 1) &&
|
||||
typeof(Table).IsAssignableFrom(gridView.BottomPagerRow.Cells[0].Controls[0].GetType()))
|
||||
{
|
||||
innerTable = gridView.BottomPagerRow.Cells[0].Controls[0] as Table;
|
||||
}
|
||||
|
||||
if ((innerTable != null) && (innerTable.Rows.Count == 1))
|
||||
{
|
||||
string className = "AspNet-GridView-Pagination AspNet-GridView-";
|
||||
className += (pos == PagerPosition.Top) ? "Top " : "Bottom ";
|
||||
if (gridView.PagerStyle != null)
|
||||
{
|
||||
className += gridView.PagerStyle.CssClass;
|
||||
}
|
||||
className = className.Trim();
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("div");
|
||||
writer.WriteAttribute("class", className);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
TableRow row = innerTable.Rows[0];
|
||||
foreach (TableCell cell in row.Cells)
|
||||
{
|
||||
foreach (Control ctrl in cell.Controls)
|
||||
{
|
||||
writer.WriteLine();
|
||||
ctrl.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("div");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class ImageAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
||||
{
|
||||
protected override void Render(HtmlTextWriter writer)
|
||||
{
|
||||
Image img = Control as Image;
|
||||
//
|
||||
if (img != null && Page != null)
|
||||
{
|
||||
//
|
||||
HttpBrowserCapabilities browser = Page.Request.Browser;
|
||||
//
|
||||
if (browser.Browser == "IE" &&
|
||||
(browser.Version == "5.0" || browser.Version == "5.5" || browser.Version == "6.0")
|
||||
&& !String.IsNullOrEmpty(img.ImageUrl) && img.ImageUrl.ToLower().EndsWith(".png"))
|
||||
{
|
||||
// add other attributes
|
||||
string imageUrl = img.ImageUrl; // save original URL
|
||||
|
||||
// change original URL to empty
|
||||
img.ImageUrl = Page.ClientScript.GetWebResourceUrl(this.GetType(), "WebsitePanel.WebPortal.Code.Adapters.empty.gif");
|
||||
|
||||
imageUrl = img.ResolveClientUrl(imageUrl);
|
||||
img.Attributes["style"] =
|
||||
String.Format("filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='{0}', sizingMethod='scale');",
|
||||
imageUrl);
|
||||
}
|
||||
}
|
||||
//
|
||||
base.Render(writer);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,287 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class LoginAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
||||
{
|
||||
private enum State
|
||||
{
|
||||
LoggingIn,
|
||||
Failed,
|
||||
Success,
|
||||
}
|
||||
State _state = State.LoggingIn;
|
||||
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
public LoginAdapter()
|
||||
{
|
||||
_state = State.LoggingIn;
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PROTECTED
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
Login login = Control as Login;
|
||||
if (Extender.AdapterEnabled && (login != null))
|
||||
{
|
||||
RegisterScripts();
|
||||
login.LoggedIn += OnLoggedIn;
|
||||
login.LoginError += OnLoginError;
|
||||
_state = State.LoggingIn;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void CreateChildControls()
|
||||
{
|
||||
base.CreateChildControls();
|
||||
Login login = Control as Login;
|
||||
if ((login != null) && (login.Controls.Count == 1) && (login.LayoutTemplate != null))
|
||||
{
|
||||
Control container = login.Controls[0];
|
||||
if (container != null)
|
||||
{
|
||||
container.Controls.Clear();
|
||||
login.LayoutTemplate.InstantiateIn(container);
|
||||
container.DataBind();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnLoggedIn(object sender, EventArgs e)
|
||||
{
|
||||
_state = State.Success;
|
||||
}
|
||||
|
||||
protected void OnLoginError(object sender, EventArgs e)
|
||||
{
|
||||
_state = State.Failed;
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, "AspNet-Login");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Login login = Control as Login;
|
||||
if (login != null)
|
||||
{
|
||||
if (login.LayoutTemplate != null)
|
||||
{
|
||||
if (login.Controls.Count == 1)
|
||||
{
|
||||
Control container = login.Controls[0];
|
||||
if (container != null)
|
||||
{
|
||||
foreach (Control c in container.Controls)
|
||||
{
|
||||
c.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteTitlePanel(writer, login);
|
||||
WriteInstructionPanel(writer, login);
|
||||
WriteHelpPanel(writer, login);
|
||||
WriteUserPanel(writer, login);
|
||||
WritePasswordPanel(writer, login);
|
||||
WriteRememberMePanel(writer, login);
|
||||
if (_state == State.Failed)
|
||||
{
|
||||
WriteFailurePanel(writer, login);
|
||||
}
|
||||
WriteSubmitPanel(writer, login);
|
||||
WriteCreateUserPanel(writer, login);
|
||||
WritePasswordRecoveryPanel(writer, login);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PRIVATE
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
}
|
||||
|
||||
private void WriteTitlePanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(login.TitleText))
|
||||
{
|
||||
string className = (login.TitleTextStyle != null) && (!String.IsNullOrEmpty(login.TitleTextStyle.CssClass)) ? login.TitleTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-Login-TitlePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", login.TitleText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteInstructionPanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(login.InstructionText))
|
||||
{
|
||||
string className = (login.InstructionTextStyle != null) && (!String.IsNullOrEmpty(login.InstructionTextStyle.CssClass)) ? login.InstructionTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-Login-InstructionPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", login.InstructionText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteFailurePanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(login.FailureText))
|
||||
{
|
||||
string className = (login.FailureTextStyle != null) && (!String.IsNullOrEmpty(login.FailureTextStyle.CssClass)) ? login.FailureTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-Login-FailurePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", login.FailureText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteHelpPanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(login.HelpPageIconUrl)) || (!String.IsNullOrEmpty(login.HelpPageText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-HelpPanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, login.HelpPageIconUrl, "Help");
|
||||
WebControlAdapterExtender.WriteLink(writer, login.HyperLinkStyle.CssClass, login.HelpPageUrl, "Help", login.HelpPageText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteUserPanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(login.FindControl("UserName").UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-UserPanel");
|
||||
Extender.WriteTextBox(writer, false, login.LabelStyle.CssClass, login.UserNameLabelText, login.TextBoxStyle.CssClass, "UserName", login.UserName);
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, login.FindControl("UserNameRequired") as RequiredFieldValidator, login.ValidatorTextStyle.CssClass, "UserName", login.UserNameRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
|
||||
private void WritePasswordPanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(login.FindControl("Password").UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-PasswordPanel");
|
||||
Extender.WriteTextBox(writer, true, login.LabelStyle.CssClass, login.PasswordLabelText, login.TextBoxStyle.CssClass, "Password", "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, login.FindControl("PasswordRequired") as RequiredFieldValidator, login.ValidatorTextStyle.CssClass, "Password", login.PasswordRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
|
||||
private void WriteRememberMePanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
if (login.DisplayRememberMe)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(login.FindControl("RememberMe").UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-RememberMePanel");
|
||||
Extender.WriteCheckBox(writer, login.LabelStyle.CssClass, login.RememberMeText, login.CheckBoxStyle.CssClass, "RememberMe", login.RememberMeSet);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteSubmitPanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
string id = "Login";
|
||||
string idWithType = WebControlAdapterExtender.MakeIdWithButtonType(id, login.LoginButtonType);
|
||||
Control btn = login.FindControl(idWithType);
|
||||
if (btn != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-SubmitPanel");
|
||||
|
||||
PostBackOptions options = new PostBackOptions(btn, "", "", false, false, false, false, true, login.UniqueID);
|
||||
string javascript = "javascript:" + Page.ClientScript.GetPostBackEventReference(options);
|
||||
javascript = Page.Server.HtmlEncode(javascript);
|
||||
|
||||
Extender.WriteSubmit(writer, login.LoginButtonType, login.LoginButtonStyle.CssClass, id, login.LoginButtonImageUrl, javascript, login.LoginButtonText);
|
||||
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteCreateUserPanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(login.CreateUserUrl)) || (!String.IsNullOrEmpty(login.CreateUserText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-CreateUserPanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, login.CreateUserIconUrl, "Create user");
|
||||
WebControlAdapterExtender.WriteLink(writer, login.HyperLinkStyle.CssClass, login.CreateUserUrl, "Create user", login.CreateUserText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WritePasswordRecoveryPanel(HtmlTextWriter writer, Login login)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(login.PasswordRecoveryUrl)) || (!String.IsNullOrEmpty(login.PasswordRecoveryText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-Login-PasswordRecoveryPanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, login.PasswordRecoveryIconUrl, "Password recovery");
|
||||
WebControlAdapterExtender.WriteLink(writer, login.HyperLinkStyle.CssClass, login.PasswordRecoveryUrl, "Password recovery", login.PasswordRecoveryText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,165 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class LoginStatusAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
||||
{
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
RegisterScripts();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
// The LoginStatus is very simple INPUT or A tag so we don't wrap it with an being/end tag (e.g., no DIV wraps it).
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
// The LoginStatus is very simple INPUT or A tag so we don't wrap it with an being/end tag (e.g., no DIV wraps it).
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
LoginStatus loginStatus = Control as LoginStatus;
|
||||
if (loginStatus != null)
|
||||
{
|
||||
string className = (!String.IsNullOrEmpty(loginStatus.CssClass)) ? ("AspNet-LoginStatus " + loginStatus.CssClass) : "AspNet-LoginStatus";
|
||||
|
||||
if (Membership.GetUser() == null)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(loginStatus.LoginImageUrl))
|
||||
{
|
||||
Control ctl = loginStatus.FindControl("ctl03");
|
||||
if (ctl != null)
|
||||
{
|
||||
writer.WriteBeginTag("input");
|
||||
writer.WriteAttribute("id", loginStatus.ClientID);
|
||||
writer.WriteAttribute("type", "image");
|
||||
writer.WriteAttribute("name", ctl.UniqueID);
|
||||
writer.WriteAttribute("title", loginStatus.ToolTip);
|
||||
writer.WriteAttribute("class", className);
|
||||
writer.WriteAttribute("src", loginStatus.ResolveClientUrl(loginStatus.LoginImageUrl));
|
||||
writer.WriteAttribute("alt", loginStatus.LoginText);
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
Page.ClientScript.RegisterForEventValidation(ctl.UniqueID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Control ctl = loginStatus.FindControl("ctl02");
|
||||
if (ctl != null)
|
||||
{
|
||||
writer.WriteBeginTag("a");
|
||||
writer.WriteAttribute("id", loginStatus.ClientID);
|
||||
writer.WriteAttribute("title", loginStatus.ToolTip);
|
||||
writer.WriteAttribute("class", className);
|
||||
writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(loginStatus.FindControl("ctl02"), ""));
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(loginStatus.LoginText);
|
||||
writer.WriteEndTag("a");
|
||||
Page.ClientScript.RegisterForEventValidation(ctl.UniqueID);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!String.IsNullOrEmpty(loginStatus.LogoutImageUrl))
|
||||
{
|
||||
Control ctl = loginStatus.FindControl("ctl01");
|
||||
if (ctl != null)
|
||||
{
|
||||
writer.WriteBeginTag("input");
|
||||
writer.WriteAttribute("id", loginStatus.ClientID);
|
||||
writer.WriteAttribute("type", "image");
|
||||
writer.WriteAttribute("name", ctl.UniqueID);
|
||||
writer.WriteAttribute("title", loginStatus.ToolTip);
|
||||
writer.WriteAttribute("class", className);
|
||||
writer.WriteAttribute("src", loginStatus.ResolveClientUrl(loginStatus.LogoutImageUrl));
|
||||
writer.WriteAttribute("alt", loginStatus.LogoutText);
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
Page.ClientScript.RegisterForEventValidation(ctl.UniqueID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Control ctl = loginStatus.FindControl("ctl00");
|
||||
if (ctl != null)
|
||||
{
|
||||
writer.WriteBeginTag("a");
|
||||
writer.WriteAttribute("id", loginStatus.ClientID);
|
||||
writer.WriteAttribute("title", loginStatus.ToolTip);
|
||||
writer.WriteAttribute("class", className);
|
||||
writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(loginStatus.FindControl("ctl00"), ""));
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(loginStatus.LogoutText);
|
||||
writer.WriteEndTag("a");
|
||||
Page.ClientScript.RegisterForEventValidation(ctl.UniqueID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PRIVATE
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,334 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Web;
|
||||
using System.Web.Configuration;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class MenuAdapter : System.Web.UI.WebControls.Adapters.MenuAdapter
|
||||
{
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
RegisterScripts();
|
||||
}
|
||||
}
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
Extender.RegisterScripts();
|
||||
string folderPath = WebConfigurationManager.AppSettings.Get("CSSFriendly-JavaScript-Path");
|
||||
if (String.IsNullOrEmpty(folderPath))
|
||||
{
|
||||
folderPath = "~/JavaScript";
|
||||
}
|
||||
string filePath = folderPath.EndsWith("/") ? folderPath + "MenuAdapter.js" : folderPath + "/MenuAdapter.js";
|
||||
Page.ClientScript.RegisterClientScriptInclude(GetType(), GetType().ToString(), Page.ResolveUrl(filePath));
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, "AspNet-Menu-" + Control.Orientation.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
writer.Indent++;
|
||||
BuildItems(Control.Items, true, writer);
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void BuildItems(MenuItemCollection items, bool isRoot, HtmlTextWriter writer)
|
||||
{
|
||||
if (items.Count > 0)
|
||||
{
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteBeginTag("ul");
|
||||
if (isRoot)
|
||||
{
|
||||
writer.WriteAttribute("class", "AspNet-Menu");
|
||||
writer.WriteAttribute("id", Control.ClientID);
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
foreach (MenuItem item in items)
|
||||
{
|
||||
BuildItem(item, writer);
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("ul");
|
||||
}
|
||||
}
|
||||
|
||||
private void BuildItem(MenuItem item, HtmlTextWriter writer)
|
||||
{
|
||||
Menu menu = Control as Menu;
|
||||
if ((menu != null) && (item != null) && (writer != null))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("li");
|
||||
|
||||
string theClass = (item.ChildItems.Count > 0) ? "AspNet-Menu-WithChildren" : "AspNet-Menu-Leaf";
|
||||
string selectedStatusClass = GetSelectStatusClass(item);
|
||||
if (!String.IsNullOrEmpty(selectedStatusClass))
|
||||
{
|
||||
theClass += " " + selectedStatusClass;
|
||||
}
|
||||
writer.WriteAttribute("class", theClass);
|
||||
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
|
||||
if (((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null)) ||
|
||||
((item.Depth >= menu.StaticDisplayLevels) && (menu.DynamicItemTemplate != null)))
|
||||
{
|
||||
writer.WriteBeginTag("div");
|
||||
writer.WriteAttribute("class", GetItemClass(menu, item));
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
|
||||
MenuItemTemplateContainer container = new MenuItemTemplateContainer(menu.Items.IndexOf(item), item);
|
||||
if ((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null))
|
||||
{
|
||||
menu.StaticItemTemplate.InstantiateIn(container);
|
||||
}
|
||||
else
|
||||
{
|
||||
menu.DynamicItemTemplate.InstantiateIn(container);
|
||||
}
|
||||
container.DataBind();
|
||||
container.RenderControl(writer);
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("div");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsLink(item))
|
||||
{
|
||||
writer.WriteBeginTag("a");
|
||||
if (!String.IsNullOrEmpty(item.NavigateUrl))
|
||||
{
|
||||
writer.WriteAttribute("href", Page.Server.HtmlEncode(menu.ResolveClientUrl(item.NavigateUrl)));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(menu, "b" + item.ValuePath.Replace(menu.PathSeparator.ToString(), "\\"), true));
|
||||
}
|
||||
|
||||
writer.WriteAttribute("class", GetItemClass(menu, item));
|
||||
WebControlAdapterExtender.WriteTargetAttribute(writer, item.Target);
|
||||
|
||||
if (!String.IsNullOrEmpty(item.ToolTip))
|
||||
{
|
||||
writer.WriteAttribute("title", item.ToolTip);
|
||||
}
|
||||
else if (!String.IsNullOrEmpty(menu.ToolTip))
|
||||
{
|
||||
writer.WriteAttribute("title", menu.ToolTip);
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteBeginTag("span");
|
||||
writer.WriteAttribute("class", GetItemClass(menu, item));
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
if (!String.IsNullOrEmpty(item.ImageUrl))
|
||||
{
|
||||
writer.WriteBeginTag("img");
|
||||
writer.WriteAttribute("src", menu.ResolveClientUrl(item.ImageUrl));
|
||||
writer.WriteAttribute("alt", !String.IsNullOrEmpty(item.ToolTip) ? item.ToolTip : (!String.IsNullOrEmpty(menu.ToolTip) ? menu.ToolTip : item.Text));
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
}
|
||||
|
||||
writer.Write(item.Text);
|
||||
|
||||
if (IsLink(item))
|
||||
{
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("a");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("span");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ((item.ChildItems != null) && (item.ChildItems.Count > 0))
|
||||
{
|
||||
BuildItems(item.ChildItems, false, writer);
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("li");
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsLink(MenuItem item)
|
||||
{
|
||||
return (item != null) && item.Enabled && ((!String.IsNullOrEmpty(item.NavigateUrl)) || item.Selectable);
|
||||
}
|
||||
|
||||
private string GetItemClass(Menu menu, MenuItem item)
|
||||
{
|
||||
string value = "AspNet-Menu-NonLink";
|
||||
if (item != null)
|
||||
{
|
||||
if (((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null)) ||
|
||||
((item.Depth >= menu.StaticDisplayLevels) && (menu.DynamicItemTemplate != null)))
|
||||
{
|
||||
value = "AspNet-Menu-Template";
|
||||
}
|
||||
else if (IsLink(item))
|
||||
{
|
||||
value = "AspNet-Menu-Link";
|
||||
}
|
||||
string selectedStatusClass = GetSelectStatusClass(item);
|
||||
if (!String.IsNullOrEmpty(selectedStatusClass))
|
||||
{
|
||||
value += " " + selectedStatusClass;
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private string GetSelectStatusClass(MenuItem item)
|
||||
{
|
||||
string value = "";
|
||||
if (item.Selected)
|
||||
{
|
||||
value += " AspNet-Menu-Selected";
|
||||
}
|
||||
else if (IsChildItemSelected(item))
|
||||
{
|
||||
value += " AspNet-Menu-ChildSelected";
|
||||
}
|
||||
else if (IsParentItemSelected(item))
|
||||
{
|
||||
value += " AspNet-Menu-ParentSelected";
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private bool IsChildItemSelected(MenuItem item)
|
||||
{
|
||||
bool bRet = false;
|
||||
|
||||
if ((item != null) && (item.ChildItems != null))
|
||||
{
|
||||
bRet = IsChildItemSelected(item.ChildItems);
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
||||
private bool IsChildItemSelected(MenuItemCollection items)
|
||||
{
|
||||
bool bRet = false;
|
||||
|
||||
if (items != null)
|
||||
{
|
||||
foreach (MenuItem item in items)
|
||||
{
|
||||
if (item.Selected || IsChildItemSelected(item.ChildItems))
|
||||
{
|
||||
bRet = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
||||
private bool IsParentItemSelected(MenuItem item)
|
||||
{
|
||||
bool bRet = false;
|
||||
|
||||
if ((item != null) && (item.Parent != null))
|
||||
{
|
||||
if (item.Parent.Selected)
|
||||
{
|
||||
bRet = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
bRet = IsParentItemSelected(item.Parent);
|
||||
}
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,534 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class PasswordRecoveryAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
|
||||
{
|
||||
private enum State
|
||||
{
|
||||
UserName,
|
||||
VerifyingUser,
|
||||
UserLookupError,
|
||||
Question,
|
||||
VerifyingAnswer,
|
||||
AnswerLookupError,
|
||||
SendMailError,
|
||||
Success
|
||||
}
|
||||
State _state = State.UserName;
|
||||
string _currentErrorText = "";
|
||||
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
private MembershipProvider PasswordRecoveryMembershipProvider
|
||||
{
|
||||
get
|
||||
{
|
||||
MembershipProvider provider = Membership.Provider;
|
||||
PasswordRecovery passwordRecovery = Control as PasswordRecovery;
|
||||
if ((passwordRecovery != null) && (passwordRecovery.MembershipProvider != null) && (!String.IsNullOrEmpty(passwordRecovery.MembershipProvider)) && (Membership.Providers[passwordRecovery.MembershipProvider] != null))
|
||||
{
|
||||
provider = Membership.Providers[passwordRecovery.MembershipProvider];
|
||||
}
|
||||
return provider;
|
||||
}
|
||||
}
|
||||
|
||||
public PasswordRecoveryAdapter()
|
||||
{
|
||||
_state = State.UserName;
|
||||
_currentErrorText = "";
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PROTECTED
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
PasswordRecovery passwordRecovery = Control as PasswordRecovery;
|
||||
if (Extender.AdapterEnabled && (passwordRecovery != null))
|
||||
{
|
||||
RegisterScripts();
|
||||
passwordRecovery.AnswerLookupError += OnAnswerLookupError;
|
||||
passwordRecovery.SendMailError += OnSendMailError;
|
||||
passwordRecovery.UserLookupError += OnUserLookupError;
|
||||
passwordRecovery.VerifyingAnswer += OnVerifyingAnswer;
|
||||
passwordRecovery.VerifyingUser += OnVerifyingUser;
|
||||
_state = State.UserName;
|
||||
_currentErrorText = "";
|
||||
}
|
||||
}
|
||||
|
||||
protected override void CreateChildControls()
|
||||
{
|
||||
base.CreateChildControls();
|
||||
|
||||
PasswordRecovery passwordRecovery = Control as PasswordRecovery;
|
||||
if (passwordRecovery != null)
|
||||
{
|
||||
if ((passwordRecovery.UserNameTemplate != null) && (passwordRecovery.UserNameTemplateContainer != null))
|
||||
{
|
||||
passwordRecovery.UserNameTemplateContainer.Controls.Clear();
|
||||
passwordRecovery.UserNameTemplate.InstantiateIn(passwordRecovery.UserNameTemplateContainer);
|
||||
passwordRecovery.UserNameTemplateContainer.DataBind();
|
||||
}
|
||||
|
||||
if ((passwordRecovery.QuestionTemplate != null) && (passwordRecovery.QuestionTemplateContainer != null))
|
||||
{
|
||||
passwordRecovery.QuestionTemplateContainer.Controls.Clear();
|
||||
passwordRecovery.QuestionTemplate.InstantiateIn(passwordRecovery.QuestionTemplateContainer);
|
||||
passwordRecovery.QuestionTemplateContainer.DataBind();
|
||||
}
|
||||
|
||||
if ((passwordRecovery.SuccessTemplate != null) && (passwordRecovery.SuccessTemplateContainer != null))
|
||||
{
|
||||
passwordRecovery.SuccessTemplateContainer.Controls.Clear();
|
||||
passwordRecovery.SuccessTemplate.InstantiateIn(passwordRecovery.SuccessTemplateContainer);
|
||||
passwordRecovery.SuccessTemplateContainer.DataBind();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnAnswerLookupError(object sender, EventArgs e)
|
||||
{
|
||||
_state = State.AnswerLookupError;
|
||||
PasswordRecovery passwordRecovery = Control as PasswordRecovery;
|
||||
if (passwordRecovery != null)
|
||||
{
|
||||
_currentErrorText = passwordRecovery.GeneralFailureText;
|
||||
if (!String.IsNullOrEmpty(passwordRecovery.QuestionFailureText))
|
||||
{
|
||||
_currentErrorText = passwordRecovery.QuestionFailureText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnSendMailError(object sender, SendMailErrorEventArgs e)
|
||||
{
|
||||
if (!e.Handled)
|
||||
{
|
||||
_state = State.SendMailError;
|
||||
_currentErrorText = e.Exception.Message;
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnUserLookupError(object sender, EventArgs e)
|
||||
{
|
||||
_state = State.UserLookupError;
|
||||
PasswordRecovery passwordRecovery = Control as PasswordRecovery;
|
||||
if (passwordRecovery != null)
|
||||
{
|
||||
_currentErrorText = passwordRecovery.GeneralFailureText;
|
||||
if (!String.IsNullOrEmpty(passwordRecovery.UserNameFailureText))
|
||||
{
|
||||
_currentErrorText = passwordRecovery.UserNameFailureText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnVerifyingAnswer(object sender, LoginCancelEventArgs e)
|
||||
{
|
||||
_state = State.VerifyingAnswer;
|
||||
}
|
||||
|
||||
protected void OnVerifyingUser(object sender, LoginCancelEventArgs e)
|
||||
{
|
||||
_state = State.VerifyingUser;
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, "AspNet-PasswordRecovery");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnPreRender(EventArgs e)
|
||||
{
|
||||
base.OnPreRender(e);
|
||||
|
||||
PasswordRecovery passwordRecovery = Control as PasswordRecovery;
|
||||
if (passwordRecovery != null)
|
||||
{
|
||||
string provider = passwordRecovery.MembershipProvider;
|
||||
}
|
||||
|
||||
// By this time we have finished doing our event processing. That means that if errors have
|
||||
// occurred, the event handlers (OnAnswerLookupError, OnSendMailError or
|
||||
// OnUserLookupError) will have been called. So, if we were, for example, verifying the
|
||||
// user and didn't cause an error then we know we can move on to the next step, getting
|
||||
// the answer to the security question... if the membership system demands it.
|
||||
|
||||
switch (_state)
|
||||
{
|
||||
case State.AnswerLookupError:
|
||||
// Leave the state alone because we hit an error.
|
||||
break;
|
||||
case State.Question:
|
||||
// Leave the state alone. Render a form to get the answer to the security question.
|
||||
_currentErrorText = "";
|
||||
break;
|
||||
case State.SendMailError:
|
||||
// Leave the state alone because we hit an error.
|
||||
break;
|
||||
case State.Success:
|
||||
// Leave the state alone. Render a concluding message.
|
||||
_currentErrorText = "";
|
||||
break;
|
||||
case State.UserLookupError:
|
||||
// Leave the state alone because we hit an error.
|
||||
break;
|
||||
case State.UserName:
|
||||
// Leave the state alone. Render a form to get the user name.
|
||||
_currentErrorText = "";
|
||||
break;
|
||||
case State.VerifyingAnswer:
|
||||
// Success! We did not encounter an error while verifying the answer to the security question.
|
||||
_state = State.Success;
|
||||
_currentErrorText = "";
|
||||
break;
|
||||
case State.VerifyingUser:
|
||||
// We have a valid user. We did not encounter an error while verifying the user.
|
||||
if (PasswordRecoveryMembershipProvider.RequiresQuestionAndAnswer)
|
||||
{
|
||||
_state = State.Question;
|
||||
}
|
||||
else
|
||||
{
|
||||
_state = State.Success;
|
||||
}
|
||||
_currentErrorText = "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
PasswordRecovery passwordRecovery = Control as PasswordRecovery;
|
||||
if (passwordRecovery != null)
|
||||
{
|
||||
if ((_state == State.UserName) || (_state == State.UserLookupError))
|
||||
{
|
||||
if ((passwordRecovery.UserNameTemplate != null) && (passwordRecovery.UserNameTemplateContainer != null))
|
||||
{
|
||||
foreach (Control c in passwordRecovery.UserNameTemplateContainer.Controls)
|
||||
{
|
||||
c.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteTitlePanel(writer, passwordRecovery);
|
||||
WriteInstructionPanel(writer, passwordRecovery);
|
||||
WriteHelpPanel(writer, passwordRecovery);
|
||||
WriteUserPanel(writer, passwordRecovery);
|
||||
if (_state == State.UserLookupError)
|
||||
{
|
||||
WriteFailurePanel(writer, passwordRecovery);
|
||||
}
|
||||
WriteSubmitPanel(writer, passwordRecovery);
|
||||
}
|
||||
}
|
||||
else if ((_state == State.Question) || (_state == State.AnswerLookupError))
|
||||
{
|
||||
if ((passwordRecovery.QuestionTemplate != null) && (passwordRecovery.QuestionTemplateContainer != null))
|
||||
{
|
||||
foreach (Control c in passwordRecovery.QuestionTemplateContainer.Controls)
|
||||
{
|
||||
c.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteTitlePanel(writer, passwordRecovery);
|
||||
WriteInstructionPanel(writer, passwordRecovery);
|
||||
WriteHelpPanel(writer, passwordRecovery);
|
||||
WriteUserPanel(writer, passwordRecovery);
|
||||
WriteQuestionPanel(writer, passwordRecovery);
|
||||
WriteAnswerPanel(writer, passwordRecovery);
|
||||
if (_state == State.AnswerLookupError)
|
||||
{
|
||||
WriteFailurePanel(writer, passwordRecovery);
|
||||
}
|
||||
WriteSubmitPanel(writer, passwordRecovery);
|
||||
}
|
||||
}
|
||||
else if (_state == State.SendMailError)
|
||||
{
|
||||
WriteFailurePanel(writer, passwordRecovery);
|
||||
}
|
||||
else if (_state == State.Success)
|
||||
{
|
||||
if ((passwordRecovery.SuccessTemplate != null) && (passwordRecovery.SuccessTemplateContainer != null))
|
||||
{
|
||||
foreach (Control c in passwordRecovery.SuccessTemplateContainer.Controls)
|
||||
{
|
||||
c.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteSuccessTextPanel(writer, passwordRecovery);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// We should never get here.
|
||||
System.Diagnostics.Debug.Fail("The PasswordRecovery control adapter was asked to render a state that it does not expect.");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/// ///////////////////////////////////////////////////////////////////////////////
|
||||
/// PRIVATE
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// Step 1: user name
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
private void WriteTitlePanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
if ((_state == State.UserName) || (_state == State.UserLookupError))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(passwordRecovery.UserNameTitleText))
|
||||
{
|
||||
string className = (passwordRecovery.TitleTextStyle != null) && (!String.IsNullOrEmpty(passwordRecovery.TitleTextStyle.CssClass)) ? passwordRecovery.TitleTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-PasswordRecovery-UserName-TitlePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", passwordRecovery.UserNameTitleText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
else if ((_state == State.Question) || (_state == State.AnswerLookupError))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(passwordRecovery.QuestionTitleText))
|
||||
{
|
||||
string className = (passwordRecovery.TitleTextStyle != null) && (!String.IsNullOrEmpty(passwordRecovery.TitleTextStyle.CssClass)) ? passwordRecovery.TitleTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-PasswordRecovery-Question-TitlePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", passwordRecovery.QuestionTitleText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteInstructionPanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
if ((_state == State.UserName) || (_state == State.UserLookupError))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(passwordRecovery.UserNameInstructionText))
|
||||
{
|
||||
string className = (passwordRecovery.InstructionTextStyle != null) && (!String.IsNullOrEmpty(passwordRecovery.InstructionTextStyle.CssClass)) ? passwordRecovery.InstructionTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-PasswordRecovery-UserName-InstructionPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", passwordRecovery.UserNameInstructionText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
else if ((_state == State.Question) || (_state == State.AnswerLookupError))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(passwordRecovery.QuestionInstructionText))
|
||||
{
|
||||
string className = (passwordRecovery.InstructionTextStyle != null) && (!String.IsNullOrEmpty(passwordRecovery.InstructionTextStyle.CssClass)) ? passwordRecovery.InstructionTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-PasswordRecovery-Question-InstructionPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", passwordRecovery.QuestionInstructionText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteFailurePanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(_currentErrorText))
|
||||
{
|
||||
string className = (passwordRecovery.FailureTextStyle != null) && (!String.IsNullOrEmpty(passwordRecovery.FailureTextStyle.CssClass)) ? passwordRecovery.FailureTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-PasswordRecovery-FailurePanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", _currentErrorText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteHelpPanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(passwordRecovery.HelpPageIconUrl)) || (!String.IsNullOrEmpty(passwordRecovery.HelpPageText)))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-PasswordRecovery-HelpPanel");
|
||||
WebControlAdapterExtender.WriteImage(writer, passwordRecovery.HelpPageIconUrl, "Help");
|
||||
WebControlAdapterExtender.WriteLink(writer, passwordRecovery.HyperLinkStyle.CssClass, passwordRecovery.HelpPageUrl, "Help", passwordRecovery.HelpPageText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteUserPanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
if ((_state == State.UserName) || (_state == State.UserLookupError))
|
||||
{
|
||||
Control container = passwordRecovery.UserNameTemplateContainer;
|
||||
TextBox textBox = (container != null) ? container.FindControl("UserName") as TextBox : null;
|
||||
RequiredFieldValidator rfv = (textBox != null) ? container.FindControl("UserNameRequired") as RequiredFieldValidator : null;
|
||||
string id = (rfv != null) ? container.ID + "_" + textBox.ID : "";
|
||||
if (!String.IsNullOrEmpty(id))
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textBox.UniqueID);
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-PasswordRecovery-UserName-UserPanel");
|
||||
Extender.WriteTextBox(writer, false, passwordRecovery.LabelStyle.CssClass, passwordRecovery.UserNameLabelText, passwordRecovery.TextBoxStyle.CssClass, id, passwordRecovery.UserName);
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, rfv, passwordRecovery.ValidatorTextStyle.CssClass, "UserName", passwordRecovery.UserNameRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
else if ((_state == State.Question) || (_state == State.AnswerLookupError))
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-PasswordRecovery-Question-UserPanel");
|
||||
Extender.WriteReadOnlyTextBox(writer, passwordRecovery.LabelStyle.CssClass, passwordRecovery.UserNameLabelText, passwordRecovery.TextBoxStyle.CssClass, passwordRecovery.UserName);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteSubmitPanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
if ((_state == State.UserName) || (_state == State.UserLookupError))
|
||||
{
|
||||
Control container = passwordRecovery.UserNameTemplateContainer;
|
||||
string id = (container != null) ? container.ID + "_Submit" : "Submit";
|
||||
|
||||
string idWithType = WebControlAdapterExtender.MakeIdWithButtonType("Submit", passwordRecovery.SubmitButtonType);
|
||||
Control btn = (container != null) ? container.FindControl(idWithType) as Control : null;
|
||||
|
||||
if (btn != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
||||
|
||||
PostBackOptions options = new PostBackOptions(btn, "", "", false, false, false, false, true, passwordRecovery.UniqueID);
|
||||
string javascript = "javascript:" + Page.ClientScript.GetPostBackEventReference(options);
|
||||
javascript = Page.Server.HtmlEncode(javascript);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-PasswordRecovery-UserName-SubmitPanel");
|
||||
Extender.WriteSubmit(writer, passwordRecovery.SubmitButtonType, passwordRecovery.SubmitButtonStyle.CssClass, id, passwordRecovery.SubmitButtonImageUrl, javascript, passwordRecovery.SubmitButtonText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
else if ((_state == State.Question) || (_state == State.AnswerLookupError))
|
||||
{
|
||||
Control container = passwordRecovery.QuestionTemplateContainer;
|
||||
string id = (container != null) ? container.ID + "_Submit" : "Submit";
|
||||
string idWithType = WebControlAdapterExtender.MakeIdWithButtonType("Submit", passwordRecovery.SubmitButtonType);
|
||||
Control btn = (container != null) ? container.FindControl(idWithType) as Control : null;
|
||||
|
||||
if (btn != null)
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(btn.UniqueID);
|
||||
|
||||
PostBackOptions options = new PostBackOptions(btn, "", "", false, false, false, false, true, passwordRecovery.UniqueID);
|
||||
string javascript = "javascript:" + Page.ClientScript.GetPostBackEventReference(options);
|
||||
javascript = Page.Server.HtmlEncode(javascript);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-PasswordRecovery-Question-SubmitPanel");
|
||||
Extender.WriteSubmit(writer, passwordRecovery.SubmitButtonType, passwordRecovery.SubmitButtonStyle.CssClass, id, passwordRecovery.SubmitButtonImageUrl, javascript, passwordRecovery.SubmitButtonText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// Step 2: question
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
private void WriteQuestionPanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-PasswordRecovery-QuestionPanel");
|
||||
Extender.WriteReadOnlyTextBox(writer, passwordRecovery.LabelStyle.CssClass, passwordRecovery.QuestionLabelText, passwordRecovery.TextBoxStyle.CssClass, passwordRecovery.Question);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
|
||||
private void WriteAnswerPanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
Control container = passwordRecovery.QuestionTemplateContainer;
|
||||
TextBox textBox = (container != null) ? container.FindControl("Answer") as TextBox : null;
|
||||
RequiredFieldValidator rfv = (textBox != null) ? container.FindControl("AnswerRequired") as RequiredFieldValidator : null;
|
||||
string id = (rfv != null) ? container.ID + "_" + textBox.ID : "";
|
||||
if (!String.IsNullOrEmpty(id))
|
||||
{
|
||||
Page.ClientScript.RegisterForEventValidation(textBox.UniqueID);
|
||||
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, "AspNet-PasswordRecovery-AnswerPanel");
|
||||
Extender.WriteTextBox(writer, false, passwordRecovery.LabelStyle.CssClass, passwordRecovery.AnswerLabelText, passwordRecovery.TextBoxStyle.CssClass, id, "");
|
||||
WebControlAdapterExtender.WriteRequiredFieldValidator(writer, rfv, passwordRecovery.ValidatorTextStyle.CssClass, "Answer", passwordRecovery.AnswerRequiredErrorMessage);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// Step 3: success
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
private void WriteSuccessTextPanel(HtmlTextWriter writer, PasswordRecovery passwordRecovery)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(passwordRecovery.SuccessText))
|
||||
{
|
||||
string className = (passwordRecovery.SuccessTextStyle != null) && (!String.IsNullOrEmpty(passwordRecovery.SuccessTextStyle.CssClass)) ? passwordRecovery.SuccessTextStyle.CssClass + " " : "";
|
||||
className += "AspNet-PasswordRecovery-SuccessTextPanel";
|
||||
WebControlAdapterExtender.WriteBeginDiv(writer, className);
|
||||
WebControlAdapterExtender.WriteSpan(writer, "", passwordRecovery.SuccessText);
|
||||
WebControlAdapterExtender.WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,697 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Collections.Specialized;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Web;
|
||||
using System.Web.Configuration;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
using System.Reflection;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class TreeViewAdapter : System.Web.UI.WebControls.Adapters.HierarchicalDataBoundControlAdapter, IPostBackEventHandler, IPostBackDataHandler
|
||||
{
|
||||
private WebControlAdapterExtender _extender = null;
|
||||
private WebControlAdapterExtender Extender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (((_extender == null) && (Control != null)) ||
|
||||
((_extender != null) && (Control != _extender.AdaptedControl)))
|
||||
{
|
||||
_extender = new WebControlAdapterExtender(Control);
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
|
||||
return _extender;
|
||||
}
|
||||
}
|
||||
|
||||
private int _checkboxIndex = 1;
|
||||
private HiddenField _viewState = null;
|
||||
private bool _updateViewState = false;
|
||||
private string _newViewState = "";
|
||||
|
||||
public TreeViewAdapter()
|
||||
{
|
||||
if (_viewState == null)
|
||||
{
|
||||
_viewState = new HiddenField();
|
||||
}
|
||||
}
|
||||
|
||||
// Implementation of IPostBackDataHandler
|
||||
public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual void RaisePostDataChangedEvent()
|
||||
{
|
||||
TreeView treeView = Control as TreeView;
|
||||
if (treeView != null)
|
||||
{
|
||||
TreeNodeCollection items = treeView.Nodes;
|
||||
_checkboxIndex = 1;
|
||||
UpdateCheckmarks(items);
|
||||
}
|
||||
}
|
||||
|
||||
// Implementation of IPostBackEventHandler
|
||||
public void RaisePostBackEvent(string eventArgument)
|
||||
{
|
||||
TreeView treeView = Control as TreeView;
|
||||
if (treeView != null)
|
||||
{
|
||||
TreeNodeCollection items = treeView.Nodes;
|
||||
if (!String.IsNullOrEmpty(eventArgument))
|
||||
{
|
||||
if (eventArgument.StartsWith("s") || eventArgument.StartsWith("e"))
|
||||
{
|
||||
string selectedNodeValuePath = eventArgument.Substring(1).Replace("\\", "/");
|
||||
TreeNode selectedNode = treeView.FindNode(selectedNodeValuePath);
|
||||
if (selectedNode != null)
|
||||
{
|
||||
bool bSelectedNodeChanged = selectedNode != treeView.SelectedNode;
|
||||
ClearSelectedNode(items);
|
||||
selectedNode.Selected = true; // does not raise the SelectedNodeChanged event so we have to do it manually (below).
|
||||
if (eventArgument.StartsWith("e"))
|
||||
{
|
||||
selectedNode.Expanded = true;
|
||||
}
|
||||
|
||||
if (bSelectedNodeChanged)
|
||||
{
|
||||
Extender.RaiseAdaptedEvent("SelectedNodeChanged", new EventArgs());
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (eventArgument.StartsWith("p"))
|
||||
{
|
||||
string parentNodeValuePath = eventArgument.Substring(1).Replace("\\", "/");
|
||||
TreeNode parentNode = treeView.FindNode(parentNodeValuePath);
|
||||
if ((parentNode != null) && ((parentNode.ChildNodes == null) || (parentNode.ChildNodes.Count == 0)))
|
||||
{
|
||||
parentNode.Expanded = true; // Raises the TreeNodePopulate event
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override Object SaveAdapterViewState()
|
||||
{
|
||||
string retStr = "";
|
||||
TreeView treeView = Control as TreeView;
|
||||
if ((treeView != null) && (_viewState != null))
|
||||
{
|
||||
if ((_viewState != null) && (Page != null) && (Page.Form != null) && (!Page.Form.Controls.Contains(_viewState)))
|
||||
{
|
||||
Panel panel = new Panel();
|
||||
panel.Controls.Add(_viewState);
|
||||
Page.Form.Controls.Add(panel);
|
||||
string script = "document.getElementById('" + _viewState.ClientID + "').value = GetViewState__AspNetTreeView('" + Control.ClientID + "');";
|
||||
Page.ClientScript.RegisterOnSubmitStatement(GetType(), GetType().ToString(), script);
|
||||
}
|
||||
retStr = _viewState.UniqueID + "|" + ComposeViewState(treeView.Nodes, "");
|
||||
}
|
||||
return retStr;
|
||||
}
|
||||
|
||||
protected override void LoadAdapterViewState(Object state)
|
||||
{
|
||||
TreeView treeView = Control as TreeView;
|
||||
string oldViewState = state as String;
|
||||
if ((treeView != null) && (oldViewState != null) && (oldViewState.Split('|').Length == 2))
|
||||
{
|
||||
string hiddenInputName = oldViewState.Split('|')[0];
|
||||
string oldExpansionState = oldViewState.Split('|')[1];
|
||||
if (!String.IsNullOrEmpty(Page.Request.Form[hiddenInputName]))
|
||||
{
|
||||
_newViewState = Page.Request.Form[hiddenInputName];
|
||||
_updateViewState = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
_updateViewState = false;
|
||||
_newViewState = "";
|
||||
|
||||
TreeView treeView = Control as TreeView;
|
||||
if (treeView != null)
|
||||
{
|
||||
treeView.EnableClientScript = false;
|
||||
}
|
||||
}
|
||||
|
||||
base.OnInit(e);
|
||||
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
RegisterScripts();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
{
|
||||
base.OnLoad(e);
|
||||
|
||||
TreeView treeView = Control as TreeView;
|
||||
if (Extender.AdapterEnabled && _updateViewState && (treeView != null))
|
||||
{
|
||||
treeView.CollapseAll();
|
||||
ExpandToState(treeView.Nodes, _newViewState);
|
||||
_updateViewState = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void RegisterScripts()
|
||||
{
|
||||
Extender.RegisterScripts();
|
||||
string folderPath = WebConfigurationManager.AppSettings.Get("CSSFriendly-JavaScript-Path");
|
||||
if (String.IsNullOrEmpty(folderPath))
|
||||
{
|
||||
folderPath = "~/JavaScript";
|
||||
}
|
||||
string filePath = folderPath.EndsWith("/") ? folderPath + "TreeViewAdapter.js" : folderPath + "/TreeViewAdapter.js";
|
||||
Page.ClientScript.RegisterClientScriptInclude(GetType(), GetType().ToString(), Page.ResolveUrl(filePath));
|
||||
}
|
||||
|
||||
protected override void RenderBeginTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderBeginTag(writer, "AspNet-TreeView");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderBeginTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
Extender.RenderEndTag(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderEndTag(writer);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderContents(HtmlTextWriter writer)
|
||||
{
|
||||
if (Extender.AdapterEnabled)
|
||||
{
|
||||
TreeView treeView = Control as TreeView;
|
||||
if (treeView != null)
|
||||
{
|
||||
writer.Indent++;
|
||||
_checkboxIndex = 1;
|
||||
BuildItems(treeView.Nodes, true, true, writer);
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderContents(writer);
|
||||
}
|
||||
}
|
||||
|
||||
private void BuildItems(TreeNodeCollection items, bool isRoot, bool isExpanded, HtmlTextWriter writer)
|
||||
{
|
||||
if (items.Count > 0)
|
||||
{
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteBeginTag("ul");
|
||||
|
||||
if (isRoot)
|
||||
{
|
||||
writer.WriteAttribute("id", Control.ClientID);
|
||||
}
|
||||
if (!isExpanded)
|
||||
{
|
||||
writer.WriteAttribute("class", "AspNet-TreeView-Hide");
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
|
||||
foreach (TreeNode item in items)
|
||||
{
|
||||
BuildItem(item, writer);
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("ul");
|
||||
}
|
||||
}
|
||||
|
||||
private void BuildItem(TreeNode item, HtmlTextWriter writer)
|
||||
{
|
||||
TreeView treeView = Control as TreeView;
|
||||
if ((treeView != null) && (item != null) && (writer != null))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("li");
|
||||
writer.WriteAttribute("class", GetNodeClass(item));
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
|
||||
if (IsExpandable(item))
|
||||
{
|
||||
WriteNodeExpander(treeView, item, writer);
|
||||
}
|
||||
|
||||
if (IsCheckbox(treeView, item))
|
||||
{
|
||||
WriteNodeCheckbox(treeView, item, writer);
|
||||
}
|
||||
else if (IsLink(item))
|
||||
{
|
||||
WriteNodeLink(treeView, item, writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteNodePlain(treeView, item, writer);
|
||||
}
|
||||
|
||||
if (HasChildren(item))
|
||||
{
|
||||
BuildItems(item.ChildNodes, false, (item.Expanded == true), writer);
|
||||
}
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("li");
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteNodeExpander(TreeView treeView, TreeNode item, HtmlTextWriter writer)
|
||||
{
|
||||
writer.WriteBeginTag("span");
|
||||
writer.WriteAttribute("class", ((item.Expanded == true) ? "AspNet-TreeView-Collapse" : "AspNet-TreeView-Expand"));
|
||||
if (HasChildren(item))
|
||||
{
|
||||
writer.WriteAttribute("onclick", "ExpandCollapse__AspNetTreeView(this)");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteAttribute("onclick", Page.ClientScript.GetPostBackEventReference(treeView, "p" + (Page.Server.HtmlEncode(item.ValuePath)).Replace("/", "\\"), true));
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(" ");
|
||||
writer.WriteEndTag("span");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private void WriteNodeImage(TreeView treeView, TreeNode item, HtmlTextWriter writer)
|
||||
{
|
||||
string imgSrc = GetImageSrc(treeView, item);
|
||||
if (!String.IsNullOrEmpty(imgSrc))
|
||||
{
|
||||
writer.WriteBeginTag("img");
|
||||
writer.WriteAttribute("src", treeView.ResolveClientUrl(imgSrc));
|
||||
writer.WriteAttribute("alt", !String.IsNullOrEmpty(item.ToolTip) ? item.ToolTip : (!String.IsNullOrEmpty(treeView.ToolTip) ? treeView.ToolTip : item.Text));
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteNodeCheckbox(TreeView treeView, TreeNode item, HtmlTextWriter writer)
|
||||
{
|
||||
writer.WriteBeginTag("input");
|
||||
writer.WriteAttribute("type", "checkbox");
|
||||
writer.WriteAttribute("id", treeView.ClientID + "n" + _checkboxIndex.ToString() + "CheckBox");
|
||||
writer.WriteAttribute("name", treeView.UniqueID + "n" + _checkboxIndex.ToString() + "CheckBox");
|
||||
|
||||
if (!String.IsNullOrEmpty(treeView.Attributes["OnClientClickedCheckbox"]))
|
||||
{
|
||||
writer.WriteAttribute("onclick", treeView.Attributes["OnClientClickedCheckbox"]);
|
||||
}
|
||||
|
||||
if (item.Checked)
|
||||
{
|
||||
writer.WriteAttribute("checked", "checked");
|
||||
}
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
|
||||
if (!String.IsNullOrEmpty(item.Text))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("label");
|
||||
writer.WriteAttribute("for", treeView.ClientID + "n" + _checkboxIndex.ToString() + "CheckBox");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(item.Text);
|
||||
writer.WriteEndTag("label");
|
||||
}
|
||||
|
||||
_checkboxIndex++;
|
||||
}
|
||||
|
||||
|
||||
private void WriteNodeLink(TreeView treeView, TreeNode item, HtmlTextWriter writer)
|
||||
{
|
||||
writer.WriteBeginTag("a");
|
||||
|
||||
if (!String.IsNullOrEmpty(item.NavigateUrl))
|
||||
{
|
||||
writer.WriteAttribute("href", Extender.ResolveUrl(item.NavigateUrl));
|
||||
}
|
||||
else
|
||||
{
|
||||
string codePrefix = "";
|
||||
if (item.SelectAction == TreeNodeSelectAction.Select)
|
||||
{
|
||||
codePrefix = "s";
|
||||
}
|
||||
else if (item.SelectAction == TreeNodeSelectAction.SelectExpand)
|
||||
{
|
||||
codePrefix = "e";
|
||||
}
|
||||
else if (item.PopulateOnDemand)
|
||||
{
|
||||
codePrefix = "p";
|
||||
}
|
||||
writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(treeView, codePrefix + (Page.Server.HtmlEncode(item.ValuePath)).Replace("/", "\\"), true));
|
||||
}
|
||||
|
||||
WebControlAdapterExtender.WriteTargetAttribute(writer, item.Target);
|
||||
|
||||
if (!String.IsNullOrEmpty(item.ToolTip))
|
||||
{
|
||||
writer.WriteAttribute("title", item.ToolTip);
|
||||
}
|
||||
else if (!String.IsNullOrEmpty(treeView.ToolTip))
|
||||
{
|
||||
writer.WriteAttribute("title", treeView.ToolTip);
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
|
||||
WriteNodeImage(treeView, item, writer);
|
||||
writer.Write(item.Text);
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("a");
|
||||
}
|
||||
|
||||
private void WriteNodePlain(TreeView treeView, TreeNode item, HtmlTextWriter writer)
|
||||
{
|
||||
writer.WriteBeginTag("span");
|
||||
if (IsExpandable(item))
|
||||
{
|
||||
writer.WriteAttribute("class", "AspNet-TreeView-ClickableNonLink");
|
||||
writer.WriteAttribute("onclick", "ExpandCollapse__AspNetTreeView(this.parentNode.getElementsByTagName('span')[0])");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteAttribute("class", "AspNet-TreeView-NonLink");
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
writer.WriteLine();
|
||||
|
||||
WriteNodeImage(treeView, item, writer);
|
||||
writer.Write(item.Text);
|
||||
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("span");
|
||||
}
|
||||
|
||||
private void UpdateCheckmarks(TreeNodeCollection items)
|
||||
{
|
||||
TreeView treeView = Control as TreeView;
|
||||
if ((treeView != null) && (items != null))
|
||||
{
|
||||
foreach (TreeNode item in items)
|
||||
{
|
||||
if (IsCheckbox(treeView, item))
|
||||
{
|
||||
string name = treeView.UniqueID + "n" + _checkboxIndex.ToString() + "CheckBox";
|
||||
bool bIsNowChecked = (Page.Request.Form[name] != null);
|
||||
if (item.Checked != bIsNowChecked)
|
||||
{
|
||||
item.Checked = bIsNowChecked;
|
||||
Extender.RaiseAdaptedEvent("TreeNodeCheckChanged", new TreeNodeEventArgs(item));
|
||||
}
|
||||
_checkboxIndex++;
|
||||
}
|
||||
|
||||
if (HasChildren(item))
|
||||
{
|
||||
UpdateCheckmarks(item.ChildNodes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsLink(TreeNode item)
|
||||
{
|
||||
return (item != null) && ((!String.IsNullOrEmpty(item.NavigateUrl)) || item.PopulateOnDemand || (item.SelectAction == TreeNodeSelectAction.Select) || (item.SelectAction == TreeNodeSelectAction.SelectExpand));
|
||||
}
|
||||
|
||||
private bool IsCheckbox(TreeView treeView, TreeNode item)
|
||||
{
|
||||
bool bItemCheckBoxDisallowed = (item.ShowCheckBox != null) && (item.ShowCheckBox.Value == false);
|
||||
bool bItemCheckBoxWanted = (item.ShowCheckBox != null) && (item.ShowCheckBox.Value == true);
|
||||
bool bTreeCheckBoxWanted =
|
||||
(treeView.ShowCheckBoxes == TreeNodeTypes.All) ||
|
||||
((treeView.ShowCheckBoxes == TreeNodeTypes.Leaf) && (!IsExpandable(item))) ||
|
||||
((treeView.ShowCheckBoxes == TreeNodeTypes.Parent) && (IsExpandable(item))) ||
|
||||
((treeView.ShowCheckBoxes == TreeNodeTypes.Root) && (item.Depth == 0));
|
||||
|
||||
return (!bItemCheckBoxDisallowed) && (bItemCheckBoxWanted || bTreeCheckBoxWanted);
|
||||
}
|
||||
|
||||
private string GetNodeClass(TreeNode item)
|
||||
{
|
||||
string value = "AspNet-TreeView-Leaf";
|
||||
if (item != null)
|
||||
{
|
||||
if (item.Depth == 0)
|
||||
{
|
||||
if (IsExpandable(item))
|
||||
{
|
||||
value = "AspNet-TreeView-Root";
|
||||
}
|
||||
else
|
||||
{
|
||||
value = "AspNet-TreeView-Root AspNet-TreeView-Leaf";
|
||||
}
|
||||
}
|
||||
else if (IsExpandable(item))
|
||||
{
|
||||
value = "AspNet-TreeView-Parent";
|
||||
}
|
||||
|
||||
if (item.Selected)
|
||||
{
|
||||
value += " AspNet-TreeView-Selected";
|
||||
}
|
||||
else if (IsChildNodeSelected(item))
|
||||
{
|
||||
value += " AspNet-TreeView-ChildSelected";
|
||||
}
|
||||
else if (IsParentNodeSelected(item))
|
||||
{
|
||||
value += " AspNet-TreeView-ParentSelected";
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private string GetImageSrc(TreeView treeView, TreeNode item)
|
||||
{
|
||||
string imgSrc = "";
|
||||
|
||||
if ((treeView != null) && (item != null))
|
||||
{
|
||||
imgSrc = item.ImageUrl;
|
||||
|
||||
if (String.IsNullOrEmpty(imgSrc))
|
||||
{
|
||||
if (item.Depth == 0)
|
||||
{
|
||||
if ((treeView.RootNodeStyle != null) && (!String.IsNullOrEmpty(treeView.RootNodeStyle.ImageUrl)))
|
||||
{
|
||||
imgSrc = treeView.RootNodeStyle.ImageUrl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!IsExpandable(item))
|
||||
{
|
||||
if ((treeView.LeafNodeStyle != null) && (!String.IsNullOrEmpty(treeView.LeafNodeStyle.ImageUrl)))
|
||||
{
|
||||
imgSrc = treeView.LeafNodeStyle.ImageUrl;
|
||||
}
|
||||
}
|
||||
else if ((treeView.ParentNodeStyle != null) && (!String.IsNullOrEmpty(treeView.ParentNodeStyle.ImageUrl)))
|
||||
{
|
||||
imgSrc = treeView.ParentNodeStyle.ImageUrl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((String.IsNullOrEmpty(imgSrc)) && (treeView.LevelStyles != null) && (treeView.LevelStyles.Count > item.Depth))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(treeView.LevelStyles[item.Depth].ImageUrl))
|
||||
{
|
||||
imgSrc = treeView.LevelStyles[item.Depth].ImageUrl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return imgSrc;
|
||||
}
|
||||
|
||||
private bool HasChildren(TreeNode item)
|
||||
{
|
||||
return ((item != null) && ((item.ChildNodes != null) && (item.ChildNodes.Count > 0)));
|
||||
}
|
||||
|
||||
private bool IsExpandable(TreeNode item)
|
||||
{
|
||||
return (HasChildren(item) || ((item != null) && item.PopulateOnDemand));
|
||||
}
|
||||
|
||||
private void ClearSelectedNode(TreeNodeCollection nodes)
|
||||
{
|
||||
if (nodes != null)
|
||||
{
|
||||
foreach (TreeNode node in nodes)
|
||||
{
|
||||
if (node.Selected)
|
||||
{
|
||||
node.Selected = false;
|
||||
}
|
||||
if (node.ChildNodes != null)
|
||||
{
|
||||
ClearSelectedNode(node.ChildNodes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsChildNodeSelected(TreeNode item)
|
||||
{
|
||||
bool bRet = false;
|
||||
|
||||
if ((item != null) && (item.ChildNodes != null))
|
||||
{
|
||||
bRet = IsChildNodeSelected(item.ChildNodes);
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
||||
private bool IsChildNodeSelected(TreeNodeCollection nodes)
|
||||
{
|
||||
bool bRet = false;
|
||||
|
||||
if (nodes != null)
|
||||
{
|
||||
foreach (TreeNode node in nodes)
|
||||
{
|
||||
if (node.Selected || IsChildNodeSelected(node.ChildNodes))
|
||||
{
|
||||
bRet = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
||||
private bool IsParentNodeSelected(TreeNode item)
|
||||
{
|
||||
bool bRet = false;
|
||||
|
||||
if ((item != null) && (item.Parent != null))
|
||||
{
|
||||
if (item.Parent.Selected)
|
||||
{
|
||||
bRet = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
bRet = IsParentNodeSelected(item.Parent);
|
||||
}
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
||||
private string ComposeViewState(TreeNodeCollection nodes, string state)
|
||||
{
|
||||
if (nodes != null)
|
||||
{
|
||||
foreach (TreeNode node in nodes)
|
||||
{
|
||||
state += (node.Expanded == true) ? "e" : "n";
|
||||
state = ComposeViewState(node.ChildNodes, state);
|
||||
}
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
private string ExpandToState(TreeNodeCollection nodes, string state)
|
||||
{
|
||||
if ((nodes != null) && (!String.IsNullOrEmpty(state)))
|
||||
{
|
||||
foreach (TreeNode node in nodes)
|
||||
{
|
||||
if (IsExpandable(node))
|
||||
{
|
||||
bool bExpand = (state[0] == 'e');
|
||||
state = state.Substring(1);
|
||||
if (bExpand)
|
||||
{
|
||||
node.Expand();
|
||||
state = ExpandToState(node.ChildNodes, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
static public void ExpandToDepth(TreeNodeCollection nodes, int expandDepth)
|
||||
{
|
||||
if (nodes != null)
|
||||
{
|
||||
foreach (TreeNode node in nodes)
|
||||
{
|
||||
if (node.Depth < expandDepth)
|
||||
{
|
||||
node.Expand();
|
||||
ExpandToDepth(node.ChildNodes, expandDepth);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,598 @@
|
|||
// Material sourced from the bluePortal project (http://blueportal.codeplex.com).
|
||||
// Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html).
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Reflection;
|
||||
using System.Web;
|
||||
using System.Web.Configuration;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.Adapters;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.Adapters;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
namespace CSSFriendly
|
||||
{
|
||||
public class WebControlAdapterExtender
|
||||
{
|
||||
private WebControl _adaptedControl = null;
|
||||
public WebControl AdaptedControl
|
||||
{
|
||||
get
|
||||
{
|
||||
System.Diagnostics.Debug.Assert(_adaptedControl != null, "CSS Friendly adapters internal error", "No control has been defined for the adapter extender");
|
||||
return _adaptedControl;
|
||||
}
|
||||
}
|
||||
|
||||
public bool AdapterEnabled
|
||||
{
|
||||
get
|
||||
{
|
||||
bool bReturn = true; // normally the adapters are enabled
|
||||
|
||||
// Individual controls can use the expando property called AdapterEnabled
|
||||
// as a way to turn the adapters off.
|
||||
// <asp:TreeView runat="server" AdapterEnabled="false" />
|
||||
if ((AdaptedControl != null) &&
|
||||
(!String.IsNullOrEmpty(AdaptedControl.Attributes["AdapterEnabled"])) &&
|
||||
(AdaptedControl.Attributes["AdapterEnabled"].IndexOf("false", StringComparison.OrdinalIgnoreCase) == 0))
|
||||
{
|
||||
bReturn = false;
|
||||
}
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
}
|
||||
|
||||
private bool _disableAutoAccessKey = false; // used when dealing with things like read-only textboxes that should not have access keys
|
||||
public bool AutoAccessKey
|
||||
{
|
||||
get
|
||||
{
|
||||
// Individual controls can use the expando property called AdapterEnabled
|
||||
// as a way to turn on/off the heurisitic for automatically setting the AccessKey
|
||||
// attribute in the rendered HTML. The default is shown below in the initialization
|
||||
// of the bReturn variable.
|
||||
// <asp:TreeView runat="server" AutoAccessKey="false" />
|
||||
|
||||
bool bReturn = true; // by default, the adapter will make access keys are available
|
||||
if (_disableAutoAccessKey ||
|
||||
((AdaptedControl != null) &&
|
||||
(!String.IsNullOrEmpty(AdaptedControl.Attributes["AutoAccessKey"])) &&
|
||||
(AdaptedControl.Attributes["AutoAccessKey"].IndexOf("false", StringComparison.OrdinalIgnoreCase) == 0)))
|
||||
{
|
||||
bReturn = false;
|
||||
}
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
}
|
||||
|
||||
public WebControlAdapterExtender(WebControl adaptedControl)
|
||||
{
|
||||
_adaptedControl = adaptedControl;
|
||||
}
|
||||
|
||||
public void RegisterScripts()
|
||||
{
|
||||
string folderPath = WebConfigurationManager.AppSettings.Get("CSSFriendly-JavaScript-Path");
|
||||
if (String.IsNullOrEmpty(folderPath))
|
||||
{
|
||||
folderPath = "~/JavaScript";
|
||||
}
|
||||
string filePath = folderPath.EndsWith("/") ? folderPath + "AdapterUtils.js" : folderPath + "/AdapterUtils.js";
|
||||
AdaptedControl.Page.ClientScript.RegisterClientScriptInclude(GetType(), GetType().ToString(), AdaptedControl.Page.ResolveUrl(filePath));
|
||||
}
|
||||
|
||||
public string ResolveUrl(string url)
|
||||
{
|
||||
string urlToResolve = url;
|
||||
int nPound = url.LastIndexOf("#");
|
||||
int nSlash = url.LastIndexOf("/");
|
||||
if ((nPound > -1) && (nSlash > -1) && ((nSlash + 1) == nPound))
|
||||
{
|
||||
// We have been given a somewhat strange URL. It has a foreward slash (/) immediately followed
|
||||
// by a pound sign (#) like this xxx/#yyy. This sort of oddly shaped URL is what you get when
|
||||
// you use named anchors instead of pages in the url attribute of a sitemapnode in an ASP.NET
|
||||
// sitemap like this:
|
||||
//
|
||||
// <siteMapNode url="#Introduction" title="Introduction" description="Introduction" />
|
||||
//
|
||||
// The intend of the sitemap author is clearly to create a link to a named anchor in the page
|
||||
// that looks like these:
|
||||
//
|
||||
// <a id="Introduction"></a> (XHTML 1.1 Strict compliant)
|
||||
// <a name="Introduction"></a> (more old fashioned but quite common in many pages)
|
||||
//
|
||||
// However, the sitemap interpretter in ASP.NET doesn't understand url values that start with
|
||||
// a pound. It prepends the current site's path in front of it before making it into a link
|
||||
// (typically for a TreeView or Menu). We'll undo that problem, however, by converting this
|
||||
// sort of oddly shaped URL back into what was intended: a simple reference to a named anchor
|
||||
// that is expected to be within the current page.
|
||||
|
||||
urlToResolve = url.Substring(nPound);
|
||||
}
|
||||
else
|
||||
{
|
||||
urlToResolve = AdaptedControl.ResolveClientUrl(urlToResolve);
|
||||
}
|
||||
|
||||
// And, just to be safe, we'll make sure there aren't any troublesome characters in whatever URL
|
||||
// we have decided to use at this point.
|
||||
string newUrl = AdaptedControl.Page.Server.HtmlEncode(urlToResolve);
|
||||
|
||||
return newUrl;
|
||||
}
|
||||
|
||||
public void RaiseAdaptedEvent(string eventName, EventArgs e)
|
||||
{
|
||||
string attr = "OnAdapted" + eventName;
|
||||
if ((AdaptedControl != null) && (!String.IsNullOrEmpty(AdaptedControl.Attributes[attr])))
|
||||
{
|
||||
string delegateName = AdaptedControl.Attributes[attr];
|
||||
Control methodOwner = AdaptedControl.Parent;
|
||||
MethodInfo method = methodOwner.GetType().GetMethod(delegateName);
|
||||
if (method == null)
|
||||
{
|
||||
methodOwner = AdaptedControl.Page;
|
||||
method = methodOwner.GetType().GetMethod(delegateName);
|
||||
}
|
||||
if (method != null)
|
||||
{
|
||||
object[] args = new object[2];
|
||||
args[0] = AdaptedControl;
|
||||
args[1] = e;
|
||||
method.Invoke(methodOwner, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RenderBeginTag(HtmlTextWriter writer, string cssClass)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(AdaptedControl.Attributes["CssSelectorClass"]))
|
||||
{
|
||||
WriteBeginDiv(writer, AdaptedControl.Attributes["CssSelectorClass"]);
|
||||
}
|
||||
|
||||
WriteBeginDiv(writer, cssClass);
|
||||
}
|
||||
|
||||
public void RenderEndTag(HtmlTextWriter writer)
|
||||
{
|
||||
WriteEndDiv(writer);
|
||||
|
||||
if (!String.IsNullOrEmpty(AdaptedControl.Attributes["CssSelectorClass"]))
|
||||
{
|
||||
WriteEndDiv(writer);
|
||||
}
|
||||
}
|
||||
|
||||
static public void RemoveProblemChildren(Control ctrl, List<ControlRestorationInfo> stashedControls)
|
||||
{
|
||||
RemoveProblemTypes(ctrl.Controls, stashedControls);
|
||||
}
|
||||
|
||||
static public void RemoveProblemTypes(ControlCollection coll, List<ControlRestorationInfo> stashedControls)
|
||||
{
|
||||
foreach (Control ctrl in coll)
|
||||
{
|
||||
if (typeof(RequiredFieldValidator).IsAssignableFrom(ctrl.GetType()) ||
|
||||
typeof(CompareValidator).IsAssignableFrom(ctrl.GetType()) ||
|
||||
typeof(RegularExpressionValidator).IsAssignableFrom(ctrl.GetType()) ||
|
||||
typeof(ValidationSummary).IsAssignableFrom(ctrl.GetType()))
|
||||
{
|
||||
ControlRestorationInfo cri = new ControlRestorationInfo(ctrl, coll);
|
||||
stashedControls.Add(cri);
|
||||
coll.Remove(ctrl);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ctrl.HasControls())
|
||||
{
|
||||
RemoveProblemTypes(ctrl.Controls, stashedControls);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static public void RestoreProblemChildren(List<ControlRestorationInfo> stashedControls)
|
||||
{
|
||||
foreach (ControlRestorationInfo cri in stashedControls)
|
||||
{
|
||||
cri.Restore();
|
||||
}
|
||||
}
|
||||
|
||||
public string MakeChildId(string postfix)
|
||||
{
|
||||
return AdaptedControl.ClientID + "_" + postfix;
|
||||
}
|
||||
|
||||
static public string MakeNameFromId(string id)
|
||||
{
|
||||
string name = "";
|
||||
for (int i=0; i<id.Length; i++)
|
||||
{
|
||||
char thisChar = id[i];
|
||||
char prevChar = ((i - 1) > -1) ? id[i - 1] : ' ';
|
||||
char nextChar = ((i + 1) < id.Length) ? id[i + 1] : ' ';
|
||||
if (thisChar == '_')
|
||||
{
|
||||
if (prevChar == '_')
|
||||
{
|
||||
name += "_";
|
||||
}
|
||||
else if (nextChar == '_')
|
||||
{
|
||||
name += "$_";
|
||||
}
|
||||
else
|
||||
{
|
||||
name += "$";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
name += thisChar;
|
||||
}
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
static public string MakeIdWithButtonType(string id, ButtonType type)
|
||||
{
|
||||
string idWithType = id;
|
||||
switch (type)
|
||||
{
|
||||
case ButtonType.Button:
|
||||
idWithType += "Button";
|
||||
break;
|
||||
case ButtonType.Image:
|
||||
idWithType += "ImageButton";
|
||||
break;
|
||||
case ButtonType.Link:
|
||||
idWithType += "LinkButton";
|
||||
break;
|
||||
}
|
||||
return idWithType;
|
||||
}
|
||||
|
||||
public string MakeChildName(string postfix)
|
||||
{
|
||||
return MakeNameFromId(MakeChildId(postfix));
|
||||
}
|
||||
|
||||
static public void WriteBeginDiv(HtmlTextWriter writer, string className)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("div");
|
||||
if (!String.IsNullOrEmpty(className))
|
||||
{
|
||||
writer.WriteAttribute("class", className);
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Indent++;
|
||||
}
|
||||
|
||||
static public void WriteEndDiv(HtmlTextWriter writer)
|
||||
{
|
||||
writer.Indent--;
|
||||
writer.WriteLine();
|
||||
writer.WriteEndTag("div");
|
||||
}
|
||||
|
||||
static public void WriteSpan(HtmlTextWriter writer, string className, string content)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(content))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("span");
|
||||
if (!String.IsNullOrEmpty(className))
|
||||
{
|
||||
writer.WriteAttribute("class", className);
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(content);
|
||||
writer.WriteEndTag("span");
|
||||
}
|
||||
}
|
||||
|
||||
static public void WriteImage(HtmlTextWriter writer, string url, string alt)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(url))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("img");
|
||||
writer.WriteAttribute("src", url);
|
||||
writer.WriteAttribute("alt", alt);
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
}
|
||||
}
|
||||
|
||||
static public void WriteLink(HtmlTextWriter writer, string className, string url, string title, string content)
|
||||
{
|
||||
if ((!String.IsNullOrEmpty(url)) && (!String.IsNullOrEmpty(content)))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("a");
|
||||
if (!String.IsNullOrEmpty(className))
|
||||
{
|
||||
writer.WriteAttribute("class", className);
|
||||
}
|
||||
writer.WriteAttribute("href", url);
|
||||
writer.WriteAttribute("title", title);
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(content);
|
||||
writer.WriteEndTag("a");
|
||||
}
|
||||
}
|
||||
|
||||
// Can't be static because it uses MakeChildId
|
||||
public void WriteLabel(HtmlTextWriter writer, string className, string text, string forId)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(text))
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("label");
|
||||
writer.WriteAttribute("for", MakeChildId(forId));
|
||||
if (!String.IsNullOrEmpty(className))
|
||||
{
|
||||
writer.WriteAttribute("class", className);
|
||||
}
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
|
||||
if (AutoAccessKey)
|
||||
{
|
||||
writer.WriteBeginTag("em");
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(text[0].ToString());
|
||||
writer.WriteEndTag("em");
|
||||
if (!String.IsNullOrEmpty(text))
|
||||
{
|
||||
writer.Write(text.Substring(1));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(text);
|
||||
}
|
||||
|
||||
writer.WriteEndTag("label");
|
||||
}
|
||||
}
|
||||
|
||||
// Can't be static because it uses MakeChildId
|
||||
public void WriteTextBox(HtmlTextWriter writer, bool isPassword, string labelClassName, string labelText, string inputClassName, string id, string value)
|
||||
{
|
||||
WriteLabel(writer, labelClassName, labelText, id);
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("input");
|
||||
writer.WriteAttribute("type", isPassword ? "password" : "text");
|
||||
if (!String.IsNullOrEmpty(inputClassName))
|
||||
{
|
||||
writer.WriteAttribute("class", inputClassName);
|
||||
}
|
||||
writer.WriteAttribute("id", MakeChildId(id));
|
||||
writer.WriteAttribute("name", MakeChildName(id));
|
||||
writer.WriteAttribute("value", value);
|
||||
if (AutoAccessKey && (!String.IsNullOrEmpty(labelText)))
|
||||
{
|
||||
writer.WriteAttribute("accesskey", labelText[0].ToString().ToLower());
|
||||
}
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
}
|
||||
|
||||
// Can't be static because it uses MakeChildId
|
||||
public void WriteReadOnlyTextBox(HtmlTextWriter writer, string labelClassName, string labelText, string inputClassName, string value)
|
||||
{
|
||||
bool oldDisableAutoAccessKey = _disableAutoAccessKey;
|
||||
_disableAutoAccessKey = true;
|
||||
|
||||
WriteLabel(writer, labelClassName, labelText, "");
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("input");
|
||||
writer.WriteAttribute("readonly", "true");
|
||||
if (!String.IsNullOrEmpty(inputClassName))
|
||||
{
|
||||
writer.WriteAttribute("class", inputClassName);
|
||||
}
|
||||
writer.WriteAttribute("value", value);
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
|
||||
_disableAutoAccessKey = oldDisableAutoAccessKey;
|
||||
}
|
||||
|
||||
// Can't be static because it uses MakeChildId
|
||||
public void WriteCheckBox(HtmlTextWriter writer, string labelClassName, string labelText, string inputClassName, string id, bool isChecked)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteBeginTag("input");
|
||||
writer.WriteAttribute("type", "checkbox");
|
||||
if (!String.IsNullOrEmpty(inputClassName))
|
||||
{
|
||||
writer.WriteAttribute("class", inputClassName);
|
||||
}
|
||||
writer.WriteAttribute("id", MakeChildId(id));
|
||||
writer.WriteAttribute("name", MakeChildName(id));
|
||||
if (isChecked)
|
||||
{
|
||||
writer.WriteAttribute("checked", "checked");
|
||||
}
|
||||
if (AutoAccessKey && (!String.IsNullOrEmpty(labelText)))
|
||||
{
|
||||
writer.WriteAttribute("accesskey", labelText[0].ToString());
|
||||
}
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
|
||||
WriteLabel(writer, labelClassName, labelText, id);
|
||||
}
|
||||
|
||||
// Can't be static because it uses MakeChildId
|
||||
public void WriteSubmit(HtmlTextWriter writer, ButtonType buttonType, string className, string id, string imageUrl, string javascript, string text)
|
||||
{
|
||||
writer.WriteLine();
|
||||
|
||||
string idWithType = id;
|
||||
|
||||
switch (buttonType)
|
||||
{
|
||||
case ButtonType.Button:
|
||||
writer.WriteBeginTag("input");
|
||||
writer.WriteAttribute("type", "submit");
|
||||
writer.WriteAttribute("value", text);
|
||||
idWithType += "Button";
|
||||
break;
|
||||
case ButtonType.Image:
|
||||
writer.WriteBeginTag("input");
|
||||
writer.WriteAttribute("type", "image");
|
||||
writer.WriteAttribute("src", imageUrl);
|
||||
idWithType += "ImageButton";
|
||||
break;
|
||||
case ButtonType.Link:
|
||||
writer.WriteBeginTag("a");
|
||||
idWithType += "LinkButton";
|
||||
break;
|
||||
}
|
||||
|
||||
if (!String.IsNullOrEmpty(className))
|
||||
{
|
||||
writer.WriteAttribute("class", className);
|
||||
}
|
||||
writer.WriteAttribute("id", MakeChildId(idWithType));
|
||||
writer.WriteAttribute("name", MakeChildName(idWithType));
|
||||
|
||||
if (!String.IsNullOrEmpty(javascript))
|
||||
{
|
||||
string pureJS = javascript;
|
||||
if (pureJS.StartsWith("javascript:"))
|
||||
{
|
||||
pureJS = pureJS.Substring("javascript:".Length);
|
||||
}
|
||||
switch (buttonType)
|
||||
{
|
||||
case ButtonType.Button:
|
||||
writer.WriteAttribute("onclick", pureJS);
|
||||
break;
|
||||
case ButtonType.Image:
|
||||
writer.WriteAttribute("onclick", pureJS);
|
||||
break;
|
||||
case ButtonType.Link:
|
||||
writer.WriteAttribute("href", javascript);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (buttonType == ButtonType.Link)
|
||||
{
|
||||
writer.Write(HtmlTextWriter.TagRightChar);
|
||||
writer.Write(text);
|
||||
writer.WriteEndTag("a");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
|
||||
}
|
||||
}
|
||||
|
||||
static public void WriteRequiredFieldValidator(HtmlTextWriter writer, RequiredFieldValidator rfv, string className, string controlToValidate, string msg)
|
||||
{
|
||||
if (rfv != null)
|
||||
{
|
||||
rfv.CssClass = className;
|
||||
rfv.ControlToValidate = controlToValidate;
|
||||
rfv.ErrorMessage = msg;
|
||||
rfv.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
|
||||
static public void WriteRegularExpressionValidator(HtmlTextWriter writer, RegularExpressionValidator rev, string className, string controlToValidate, string msg, string expression)
|
||||
{
|
||||
if (rev != null)
|
||||
{
|
||||
rev.CssClass = className;
|
||||
rev.ControlToValidate = controlToValidate;
|
||||
rev.ErrorMessage = msg;
|
||||
rev.ValidationExpression = expression;
|
||||
rev.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
|
||||
static public void WriteCompareValidator(HtmlTextWriter writer, CompareValidator cv, string className, string controlToValidate, string msg, string controlToCompare)
|
||||
{
|
||||
if (cv != null)
|
||||
{
|
||||
cv.CssClass = className;
|
||||
cv.ControlToValidate = controlToValidate;
|
||||
cv.ErrorMessage = msg;
|
||||
cv.ControlToCompare = controlToCompare;
|
||||
cv.RenderControl(writer);
|
||||
}
|
||||
}
|
||||
|
||||
static public void WriteTargetAttribute(HtmlTextWriter writer, string targetValue)
|
||||
{
|
||||
if ((writer != null) && (!String.IsNullOrEmpty(targetValue)))
|
||||
{
|
||||
// If the targetValue is _blank then we have an opportunity to use attributes other than "target"
|
||||
// which allows us to be compliant at the XHTML 1.1 Strict level. Specifically, we can use a combination
|
||||
// of "onclick" and "onkeypress" to achieve what we want to achieve when we used to render
|
||||
// target='blank'.
|
||||
//
|
||||
// If the targetValue is other than _blank then we fall back to using the "target" attribute.
|
||||
// This is a heuristic that can be refined over time.
|
||||
if (targetValue.Equals("_blank", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
string js = "window.open(this.href, '_blank', ''); return false;";
|
||||
writer.WriteAttribute("onclick", js);
|
||||
writer.WriteAttribute("onkeypress", js);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteAttribute("target", targetValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ControlRestorationInfo
|
||||
{
|
||||
private Control _ctrl = null;
|
||||
public Control Control
|
||||
{
|
||||
get { return _ctrl; }
|
||||
}
|
||||
|
||||
private ControlCollection _coll = null;
|
||||
public ControlCollection Collection
|
||||
{
|
||||
get { return _coll; }
|
||||
}
|
||||
|
||||
public bool IsValid
|
||||
{
|
||||
get { return (Control != null) && (Collection != null); }
|
||||
}
|
||||
|
||||
public ControlRestorationInfo(Control ctrl, ControlCollection coll)
|
||||
{
|
||||
_ctrl = ctrl;
|
||||
_coll = coll;
|
||||
}
|
||||
|
||||
public void Restore()
|
||||
{
|
||||
if (IsValid)
|
||||
{
|
||||
_coll.Add(_ctrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 43 B |
Loading…
Add table
Add a link
Reference in a new issue