1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
//------------------------------------------------------------------------------
// <copyright file="WmlPhoneLinkAdapter.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
#if WMLSUPPORT
namespace System.Web.UI.WebControls.Adapters {
using System.Web.UI.WebControls;
public class WmlPhoneLinkAdapter : PhoneLinkAdapter {
// UNDONE: Add style.
protected internal override void Render(HtmlTextWriter markupWriter) {
WmlTextWriter writer = (WmlTextWriter)markupWriter;
String text, url, phoneNumber;
String controlText = Control.Text;
// Always strip off optional separators for PhoneNumber before it
// is added in markup.
String originalNumber = Control.PhoneNumber;
char[] plainNumber = new char[originalNumber.Length]; // allocate enough buffer size
// Loop to strip out optional separators
int sizeOfPlainNumber = 0;
for (int i = 0; i < originalNumber.Length; ++i) {
char ch = originalNumber[i];
if ((ch >= '0' && ch <= '9') || ch == '+') {
plainNumber[sizeOfPlainNumber] = ch;
sizeOfPlainNumber++;
}
}
// Assign the number string with the right size
phoneNumber = new String(plainNumber, 0, sizeOfPlainNumber);
// Construct text and url based on device capabilities
//
HttpBrowserCapabilities browser = null;
if (Page != null && Page.Request != null) {
browser = Page.Request.Browser;
}
// TODO: Replace hard coded string key.
if (browser != null && (String)browser["canInitiateVoiceCall"] != "true") {
text = String.Format(controlText,
originalNumber);
url = Control.ResolveClientUrl(Control.NavigateUrl);
url = Control.GetCountClickUrl(url);
}
else {
// Some WML browsers require the phone number
// showing as text so it can be selected. If it is not
// formatted in the text yet, append it to the end of the
// text.
// TODO: Replace hard coded string key.
if (browser != null && browser["requiresPhoneNumbersAsPlainText"] == "true") {
text = controlText + " " + phoneNumber;
url = String.Empty;
}
else {
text = (!String.IsNullOrEmpty(controlText)) ?
controlText : originalNumber;
url = "wtai://wp/mc;" + phoneNumber;
}
}
// Write out plain text or corresponding link/softkey command
// accordingly
//
writer.EnterStyle(Control.ControlStyle);
if (url.Length == 0) {
writer.WriteEncodedText(text);
}
else {
String softkeyLabel = Control.SoftkeyLabel;
if (String.IsNullOrEmpty(softkeyLabel)) {
softkeyLabel = text;
}
PageAdapter.RenderBeginHyperlink(writer, url, false /* encode, Whidbey 28731 */, softkeyLabel, Control.AccessKey);
writer.Write(text);
PageAdapter.RenderEndHyperlink(writer);
}
writer.ExitStyle(Control.ControlStyle);
}
}
}
#endif
|