Option Strict On
Imports Microsoft.VisualBasic
Imports System.ComponentModel
Namespace MikesControls
Public Class DynamicEmail
Inherits WebControl
#Region "Declarations"
Private _emailName, _domain, _extension As String
#End Region
#Region "Properties"
<Browsable(True), Bindable(True)> Public Property EmailLinkText() As String
Get
If ViewState("emailLinkText") Is Nothing Then
Return ""
Else
Return ViewState("emailLinkText").ToString()
End If
End Get
Set(ByVal value As String)
ViewState("emailLinkText") = value
End Set
End Property
<Browsable(True), Bindable(True)> Public Property FullEmailAddress() As String
Get
If ViewState("fullEmailAddress") Is Nothing Then
Return ""
Else
Return ViewState("fullEmailAddress").ToString()
End If
End Get
Set(ByVal value As String)
If value = "" Then
_extension = ""
_domain = ""
_emailName = ""
ViewState.Remove("fullEmailAddress")
Else
ViewState("fullEmailAddress") = value
ParseFullEmailAddress(value)
End If
End Set
End Property
<Browsable(True), Bindable(True)> Public Property EmailName() As String
Get
If ViewState("emailName") Is Nothing Then
Return ""
Else
Return ViewState("emailName").ToString()
End If
End Get
Set(ByVal value As String)
If value = "" Then
ViewState.Remove("emailName")
Else
ViewState("emailName") = value
End If
End Set
End Property
<Browsable(True), Bindable(True)> Public Property Domain() As String
Get
If ViewState("domain") Is Nothing Then
Return ""
Else
Return ViewState("domain").ToString()
End If
End Get
Set(ByVal value As String)
If value = "" Then
ViewState.Remove("domain")
Else
ViewState("domain") = value
End If
End Set
End Property
<Browsable(True), Bindable(True)> Public Property Extension() As String
Get
Dim retValue As String = ""
If Not ViewState("extension") Is Nothing Then
retValue = ViewState("extension").ToString()
End If
' Remove dot if necessary
If retValue.IndexOf(".") > -1 Then
If retValue.Substring(0, 1) = "." Then
retValue = retValue.Substring(1)
End If
End If
Return retValue
End Get
Set(ByVal value As String)
If value = "" Then
ViewState.Remove("extension")
Else
' Remove dot if necessary
If value.Substring(0, 1) = "." Then
value = value.Substring(1)
End If
ViewState("extension") = value
End If
End Set
End Property
Public ReadOnly Property FullEmailAddressEmailName() As String
Get
If ViewState("fullEmailAddress") Is Nothing Then
Return Me.EmailName
Else
Return _emailName
End If
End Get
End Property
Public ReadOnly Property FullEmailAddressDomain() As String
Get
If ViewState("fullEmailAddress") Is Nothing Then
Return Me.Domain
Else
Return _domain
End If
End Get
End Property
Public ReadOnly Property FullEmailAddressExtension() As String
Get
If ViewState("fullEmailAddress") Is Nothing Then
Return Me.Extension
Else
Return _extension
End If
End Get
End Property
<Browsable(True), DefaultValue(" AT "), Bindable(True)> Public Property DomainDelimiterText() As String
Get
If ViewState("DomainDelimiterText") Is Nothing Then
Return " AT "
Else
Return ViewState("DomainDelimiterText").ToString()
End If
End Get
Set(ByVal value As String)
ViewState("DomainDelimiterText") = value
End Set
End Property
<Browsable(True), DefaultValue(" DOT "), Bindable(True)> Public Property ExtensionDelimiterText() As String
Get
If ViewState("ExtensionDelimiterText") Is Nothing Then
Return " DOT "
Else
Return ViewState("ExtensionDelimiterText").ToString()
End If
End Get
Set(ByVal value As String)
ViewState("ExtensionDelimiterText") = value
End Set
End Property
<Browsable(False), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
Protected ReadOnly Property DynamicEmailFunctionCall() As String
Get
If ViewState("fullEmailAddress") Is Nothing Then
Return "this.href=DynamicEmail('" & Me.EmailName & "','" & Me.Domain & "','" & Me.Extension & "')"
Else
Return "this.href=DynamicEmail('" & _emailName & "','" & _domain & "','" & _extension & "')"
End If
End Get
End Property
#End Region
#Region "Overrides"
Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
MyBase.OnPreRender(e)
Dim dynamicEmailJavaScript As New StringBuilder()
dynamicEmailJavaScript.Append("<script language=""javascript"">;")
dynamicEmailJavaScript.Append("function DynamicEmail(name, domain, extension, subject)")
dynamicEmailJavaScript.Append("{")
dynamicEmailJavaScript.Append("return ""mailto:"" + name + ""@"" + domain + ""."" + extension")
dynamicEmailJavaScript.Append("}")
dynamicEmailJavaScript.Append("</" & "script>")
' 2.0 version
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "mc:DynamicEmailControl", dynamicEmailJavaScript.ToString(), False)
' 1.1 version
'Page.RegisterClientScriptBlock("mc:DynamicEmailControl", dynamicEmailJavaScript.ToString())
End Sub
Protected Overrides Sub AddAttributesToRender(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.AddAttributesToRender(writer)
writer.AddAttribute(HtmlTextWriterAttribute.Href, " ")
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Me.DynamicEmailFunctionCall)
writer.AddAttribute("onmouseover", Me.DynamicEmailFunctionCall)
End Sub
Protected Overrides ReadOnly Property TagKey() As System.Web.UI.HtmlTextWriterTag
Get
Return HtmlTextWriterTag.A
End Get
End Property
Protected Overrides Sub RenderContents(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim textToRender As String = ""
If Me.EmailLinkText Is Nothing OrElse Me.EmailLinkText = "" Then
If ViewState("fullEmailAddress") Is Nothing Then
textToRender = Me.EmailName & Me.DomainDelimiterText & Me.Domain & Me.ExtensionDelimiterText & Me.Extension
Else
textToRender = _emailName & Me.DomainDelimiterText & _domain & Me.ExtensionDelimiterText & _extension
End If
Else
textToRender = Me.EmailLinkText
End If
writer.Write(textToRender)
End Sub
#End Region
#Region "Helper Members"
Private Function FullEmailAddressIsValid(ByVal fullEmailAddress As String) As Boolean
Return True
End Function
Private Sub ParseFullEmailAddress(ByVal fullEmailAddress As String)
_emailName = ""
_extension = ""
_domain = ""
If fullEmailAddress = "" Then
Exit Sub
End If
' Got this RegEx straight out of the docs.
If Regex.IsMatch(fullEmailAddress, "^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$") Then
Dim atPos As Integer = fullEmailAddress.IndexOf("@")
Dim lastDot As Integer = fullEmailAddress.LastIndexOf(".")
If atPos = -1 Or lastDot = -1 Then
' Do nothing -- malformed email address that somehow escaped the RegEx
Else
_emailName = fullEmailAddress.Substring(0, atPos)
_domain = fullEmailAddress.Substring(atPos + 1, lastDot - atPos - 1)
_extension = fullEmailAddress.Substring(lastDot + 1)
End If
End If
End Sub
#End Region
End Class
End Namespace
Colorized by: CarlosAg.CodeColorizer