diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.cs | 20 | ||||
-rw-r--r-- | src/DotNetOpenAuth/OpenId/RelyingParty/SelectorInfoCardButton.cs | 36 |
2 files changed, 44 insertions, 12 deletions
diff --git a/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.cs b/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.cs index c0d0c0f..653bd97 100644 --- a/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.cs +++ b/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.cs @@ -161,11 +161,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { } /// <summary> - /// Gets or sets the InfoCard selector which may be displayed alongside the OP buttons. - /// </summary> - public InfoCardSelector InfoCardSelector { get; set; } - - /// <summary> /// Gets the name of the open id auth data form key (for the value as stored at the user agent as a FORM field). /// </summary> /// <value> @@ -181,12 +176,15 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { protected override void CreateChildControls() { base.CreateChildControls(); - this.InfoCardSelector = new InfoCardSelector(); - this.InfoCardSelector.ClaimsRequested.Add(new ClaimType { Name = ClaimTypes.PPID }); - this.InfoCardSelector.ImageSize = InfoCardImageSize.Size60x42; - this.InfoCardSelector.ReceivedToken += this.InfoCardSelector_ReceivedToken; - this.InfoCardSelector.TokenProcessingError += this.InfoCardSelector_TokenProcessingError; - this.Controls.Add(this.InfoCardSelector); + var selectorButton = this.Buttons.OfType<SelectorInfoCardButton>().FirstOrDefault(); + if (selectorButton != null) { + var selector = selectorButton.InfoCardSelector; + selector.ClaimsRequested.Add(new ClaimType { Name = ClaimTypes.PPID }); + selector.ImageSize = InfoCardImageSize.Size60x42; + selector.ReceivedToken += this.InfoCardSelector_ReceivedToken; + selector.TokenProcessingError += this.InfoCardSelector_TokenProcessingError; + this.Controls.Add(selector); + } this.textBox = new OpenIdAjaxTextBox(); this.textBox.ID = "openid_identifier"; diff --git a/src/DotNetOpenAuth/OpenId/RelyingParty/SelectorInfoCardButton.cs b/src/DotNetOpenAuth/OpenId/RelyingParty/SelectorInfoCardButton.cs index 8fac58f..d9b785c 100644 --- a/src/DotNetOpenAuth/OpenId/RelyingParty/SelectorInfoCardButton.cs +++ b/src/DotNetOpenAuth/OpenId/RelyingParty/SelectorInfoCardButton.cs @@ -5,20 +5,54 @@ //----------------------------------------------------------------------- namespace DotNetOpenAuth.OpenId.RelyingParty { + using System; + using System.Collections.ObjectModel; + using System.ComponentModel; + using System.Diagnostics.Contracts; using System.Web.UI; + using DotNetOpenAuth.InfoCard; /// <summary> /// A button that appears in the <see cref="OpenIdSelector"/> control that /// activates the Information Card selector on the browser, if one is available. /// </summary> + [Serializable] public class SelectorInfoCardButton : SelectorButton { /// <summary> + /// The backing field for the <see cref="InfoCardSelector"/> property. + /// </summary> + private InfoCardSelector infoCardSelector; + + /// <summary> /// Initializes a new instance of the <see cref="SelectorInfoCardButton"/> class. /// </summary> public SelectorInfoCardButton() { } /// <summary> + /// Gets or sets the InfoCard selector which may be displayed alongside the OP buttons. + /// </summary> + [PersistenceMode(PersistenceMode.InnerProperty)] + public InfoCardSelector InfoCardSelector { + get { + if (this.infoCardSelector == null) { + this.infoCardSelector = new InfoCardSelector(); + } + + return this.infoCardSelector; + } + + set { + Contract.Requires<ArgumentNullException>(value != null); + if (this.infoCardSelector != null) { + Logger.Library.WarnFormat("{0}.InfoCardSelector property is being set multiple times.", GetType().Name); + } + + this.infoCardSelector = value; + } + } + + /// <summary> /// Ensures that this button has been initialized to a valid state. /// </summary> internal override void EnsureValid() { @@ -38,7 +72,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <param name="writer">The writer.</param> /// <param name="selector">The containing selector control.</param> protected internal override void RenderButtonContent(HtmlTextWriter writer, OpenIdSelector selector) { - selector.InfoCardSelector.RenderControl(writer); + this.InfoCardSelector.RenderControl(writer); } } } |