Initial project's source code check-in.

This commit is contained in:
ptsurbeleu 2011-07-13 16:07:32 -07:00
commit b03b0b373f
4573 changed files with 981205 additions and 0 deletions

View file

@ -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);
}
}
}
}
}
}
}

View file

@ -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()
{
}
}
}

View file

@ -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);
}
}
}
}

View file

@ -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()
{
}
}
}

View file

@ -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");
}
}
}
}

View file

@ -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");
}
}
}
}

View file

@ -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;\">&nbsp;</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");
}
}
}
}
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}
}
}

View file

@ -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()
{
}
}
}

View file

@ -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;
}
}
}

View file

@ -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);
}
}
}
}

View file

@ -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("&nbsp;");
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);
}
}
}
}
}
}

View file

@ -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