Beispiel #1
0
        protected string BuildUrl(SafeDictionary <string> attributes, UltraLinkField linkField)
        {
            string output = null;

            switch (linkField.LinkType)
            {
            case "internal":
                output = BuildInternalUrl(linkField);
                break;

            case "external":
                output = BuildExternalUrl(linkField);
                break;

            case "phone":
                output = BuildPhone(linkField);
                break;

            case "email":
                output = BuildEmail(linkField);
                break;
            }

            output = AppendQueryString(attributes, linkField, output);
            output = AppendAnchorTarget(attributes, linkField, output);

            return(output);
        }
Beispiel #2
0
        protected virtual void SetRelAttribute(SafeDictionary <string> attributes, UltraLinkField linkField)
        {
            var relBuilder = new StringBuilder();

            if ((linkField.IsExternal || linkField.IsInternal) && (linkField.OpenNewWindow || Settings.ProtectExternalLinksWithBlankTarget))
            {
                relBuilder.Append("noopener ");
            }

            if ((linkField.IsExternal || linkField.IsInternal) && linkField.NoReferrer)
            {
                relBuilder.Append("noreferrer ");
            }
            if (linkField.NoFollow)
            {
                relBuilder.Append("nofollow ");
            }
            if (linkField.NoIndex)
            {
                relBuilder.Append("noindex ");
            }

            var relValue = relBuilder.ToString().TrimEnd();

            attributes["rel"] = relValue;
        }
Beispiel #3
0
        protected string GetInnerText(SafeDictionary <string> attributes, UltraLinkField linkField)
        {
            if (attributes.ContainsKey("text"))
            {
                return(attributes["text"]);
            }

            if (attributes.ContainsKey("description"))
            {
                return(attributes["description"]);
            }

            if (linkField.IsInternal)
            {
                if (linkField.UseItemDisplayName && linkField.TargetItem != null)
                {
                    return(string.IsNullOrEmpty(linkField.TargetItem.DisplayName) ? linkField.TargetItem.Name : linkField.TargetItem.DisplayName);
                }
                return(linkField.LinkDisplayText);
            }

            if (!string.IsNullOrEmpty(linkField.LinkDisplayText))
            {
                return(linkField.LinkDisplayText);
            }

            if (linkField.LinkType == "phone")
            {
                if (linkField.PhoneMask != null && !string.IsNullOrEmpty(linkField.CustomLink))
                {
                    var maskValue = linkField.PhoneMask["Mask"];

                    if (string.IsNullOrEmpty(maskValue))
                    {
                        return(linkField.CustomLink);
                    }

                    var mask = maskValue?.Replace(".", "\\.").Replace("_", "-");

                    return(FormatPhoneNumber(linkField.CustomLink, mask));
                }
            }

            if (string.IsNullOrEmpty(linkField.LinkDisplayText))
            {
                return(linkField.CustomLink);
            }

            return(string.Empty);
        }
Beispiel #4
0
        protected void SetCustomAttributes(SafeDictionary <string> attributes, UltraLinkField linkField)
        {
            foreach (string key in linkField.CustomAttributes)
            {
                if (!ReservedSet.Contains(key.ToLowerInvariant()))
                {
                    var value = linkField.CustomAttributes[key];

                    if (!attributes.ContainsKey(key))
                    {
                        attributes[key] = value;
                    }
                }
            }
        }
Beispiel #5
0
        protected string BuildEmail(UltraLinkField linkField)
        {
            var urlValue = !string.IsNullOrEmpty(linkField.Url) ? linkField.Url : linkField.CustomLink;

            if (string.IsNullOrEmpty(urlValue))
            {
                return(string.Empty);
            }

            if (!urlValue.StartsWith("mailTo:"))
            {
                return("mailTo:" + urlValue);
            }
            return(urlValue);
        }
Beispiel #6
0
 protected string BuildInternalUrl(UltraLinkField linkField)
 {
     if (linkField.TargetItem != null)
     {
         if (string.IsNullOrEmpty(linkField.Url))
         {
             return(LinkManager.GetItemUrl(linkField.TargetItem, UrlOptions.DefaultOptions));
         }
         else
         {
             if (linkField.Url.StartsWith("/"))
             {
                 var path      = linkField.Url;
                 var foundItem = linkField.TargetItem.Database.GetItem(path);
                 return(LinkManager.GetItemUrl(foundItem, UrlOptions.DefaultOptions));
             }
         }
     }
     return(string.Empty);
 }
Beispiel #7
0
        protected string BuildExternalUrl(UltraLinkField linkField)
        {
            var urlValue = !string.IsNullOrEmpty(linkField.Url) ? linkField.Url : linkField.CustomLink;

            if (string.IsNullOrEmpty(urlValue))
            {
                return(string.Empty);
            }

            if (linkField.ForceHttps)
            {
                if (!urlValue.StartsWith("https://"))
                {
                    if (urlValue.StartsWith("http://"))
                    {
                        return(urlValue.Replace("http://", "https://"));
                    }
                    else
                    {
                        return("https://" + urlValue);
                    }
                }
                return(urlValue);
            }
            else
            {
                if (!urlValue.StartsWith("http://"))
                {
                    if (urlValue.StartsWith("https://"))
                    {
                        return(urlValue.Replace("https://", "http://"));
                    }
                    else
                    {
                        return("http://" + urlValue);
                    }
                }
                return(urlValue);
            }
        }
Beispiel #8
0
        protected string AppendAnchorTarget(SafeDictionary <string> attributes, UltraLinkField linkField, string url)
        {
            if (!linkField.IsExternal && !linkField.IsInternal)
            {
                return(url);
            }

            var anchor = attributes.ContainsKey("anchor") ? attributes["anchor"] : linkField.Anchor;

            if (!string.IsNullOrEmpty(anchor))
            {
                if (!url.EndsWith("#"))
                {
                    url = url + "#" + anchor;
                }
                else
                {
                    url = url + anchor;
                }
            }
            return(url);
        }
Beispiel #9
0
 protected virtual void SetExternalTargetAttribute(SafeDictionary <string> attributes, UltraLinkField linkField)
 {
     if ((linkField.IsExternal || linkField.IsInternal) && linkField.OpenNewWindow)
     {
         attributes["target"] = "_blank";
     }
 }
Beispiel #10
0
        public virtual RenderFieldResult Render()
        {
            UltraLinkField linkField = this.LinkField;

            if (linkField == null)
            {
                return(new RenderFieldResult()
                {
                    FirstPart = string.Empty,
                    LastPart = string.Empty
                });
            }


            SafeDictionary <string> attributes = new SafeDictionary <string>();

            if (this.Parameters.Any())
            {
                attributes.AddRange((SafeDictionary <string, string>) this.Parameters);
            }

            this.SetParameters(attributes, "class", linkField.Class);
            this.SetParameters(attributes, "id", linkField.ElementId);
            this.SetRelAttribute(attributes, linkField);
            this.SetExternalTargetAttribute(attributes, linkField);
            this.SetCustomAttributes(attributes, linkField);
            this.SetParameters(attributes, "href", this.BuildUrl(attributes, linkField));

            StringBuilder tag = new StringBuilder(linkField.TextBeforeLink);

            if (!string.IsNullOrEmpty(linkField.TextBeforeLink))
            {
                tag.Append(" ");
            }

            tag.Append("<a");

            foreach (KeyValuePair <string, string> keyValuePair in (SafeDictionary <string, string>)attributes)
            {
                string key   = keyValuePair.Key;
                string value = keyValuePair.Value;

                if (!ReservedSet.Contains(key.ToLowerInvariant()))
                {
                    FieldRendererBase.AddAttribute(tag, key, value);
                }
            }
            tag.Append('>');

            tag.Append(GetInnerText(attributes, linkField));

            tag.Append("</a>");

            if (!string.IsNullOrEmpty(linkField.TextAfterLink))
            {
                tag.Append(" ");
            }

            return(new RenderFieldResult()
            {
                FirstPart = tag.ToString(),
                LastPart = linkField.TextAfterLink
            });
        }
Beispiel #11
0
        protected string AppendQueryString(SafeDictionary <string> attributes, UltraLinkField linkField, string url)
        {
            if (string.IsNullOrEmpty(url) || !(linkField.IsExternal || linkField.IsInternal))
            {
                return(url);
            }

            var developerQueryParams = new NameValueCollection();

            if (attributes.ContainsKey("query"))
            {
                var pairs = attributes["query"].Split('&');
                foreach (var pair in pairs)
                {
                    var split = pair.Split('=');
                    var key   = split[0];

                    if (split.Length > 1)
                    {
                        developerQueryParams.Add(key, split[1]);
                    }
                    else
                    {
                        developerQueryParams.Add(key, string.Empty);
                    }
                }
            }

            var builder = new StringBuilder();

            foreach (string key in linkField.QueryStringParameters)
            {
                var overrideValue = developerQueryParams[key];

                var value = linkField.QueryStringParameters[key];

                if (!string.IsNullOrEmpty(overrideValue))
                {
                    builder.AppendFormat("{0}={1}&", key, overrideValue);
                }
                else
                {
                    builder.AppendFormat("{0}={1}&", key, value);
                }
            }

            string query = null;

            if (builder.Length > 0)
            {
                query = builder.Remove(builder.Length - 1, 1).ToString();
                builder.Clear();
            }

            builder.Append(url);

            if (query != null)
            {
                if (!url.EndsWith("?"))
                {
                    builder.Append("?");
                }
                builder.Append(query);
            }


            return(builder.ToString());
        }