public static HtmlString ClickFieldAttribute([NotNull] this SitecoreHelper htmlHelper, [NotNull] Item item, [NotNull] string clickFieldName)
    {
      Assert.ArgumentNotNull(htmlHelper, "htmlHelper");
      Assert.ArgumentNotNull(item, "item");
      Assert.ArgumentNotNull(clickFieldName, "clickFieldName");

      if (string.IsNullOrEmpty(clickFieldName))
      {
        clickFieldName = "$itemid";
      }

      var click = item.GetField(clickFieldName);
      if (string.IsNullOrEmpty(click))
      {
        return MvcHtmlString.Empty;
      }

      if (click.StartsWith("trigger:", StringComparison.InvariantCultureIgnoreCase) || click.StartsWith("action:", StringComparison.InvariantCultureIgnoreCase))
      {
        var args = new GetClickArgs(click);
        ClientHost.Pipelines.Run(PipelineNames.GetClick, args);

        if (string.IsNullOrEmpty(args.Click))
        {
          return MvcHtmlString.Empty;
        }

        var name = item.Name.GetSafeIdentifier() + "Click";

        return new HtmlString(string.Format("data-sc-id=\"{0}\" data-sc-presenter=\"{1}\" data-sc-component=\"Bootstrap3-Click\" data-sc-require=\"/sitecore/shell/-/speak/v1/client/Bootstrap3-Click.js\" data-bind=\"click: click, enable: isEnabled, visible: isVisible\" data-sc-properties=\"{{ "isEnabled":"true", "isVisible":"true" }}\" data-sc-click=\"{2}\"", name, SpeakSettings.Components.KnockoutPresenter, HttpUtility.HtmlAttributeEncode(args.Click)));
      }

      if (click.StartsWith("javascript:", StringComparison.InvariantCultureIgnoreCase))
      {
        var args = new GetClickArgs(click);
        ClientHost.Pipelines.Run(PipelineNames.GetClick, args);
        if (string.IsNullOrEmpty(args.Click))
        {
          return MvcHtmlString.Empty;
        }

        return new HtmlString(string.Format("onclick=\"{0}\"", HttpUtility.HtmlAttributeEncode(args.Click)));
      }

      return new HtmlString("data-sc-click=\"" + HttpUtility.HtmlAttributeEncode(click) + "\"");
    }
    public static HtmlString HrefAttribute([NotNull] this SitecoreHelper htmlHelper, [NotNull] Item item, [NotNull] string clickFieldName)
    {
      Assert.ArgumentNotNull(htmlHelper, "htmlHelper");
      Assert.ArgumentNotNull(item, "item");
      Assert.ArgumentNotNull(clickFieldName, "clickFieldName");

      if (string.IsNullOrEmpty(clickFieldName))
      {
        clickFieldName = "$itemid";
      }

      if (clickFieldName.StartsWith("#") && clickFieldName.Length > 1)
      {
        var link = "#" + item.GetField(clickFieldName.Mid(1));
        return new HtmlString("href=\"" + HttpUtility.HtmlAttributeEncode(link) + "\"");
      }

      var click = item.GetField(clickFieldName);
      if (string.IsNullOrEmpty(click))
      {
        return MvcHtmlString.Empty;
      }

      if (click.StartsWith("trigger:", StringComparison.InvariantCultureIgnoreCase) || click.StartsWith("action:", StringComparison.InvariantCultureIgnoreCase))
      {
        var args = new GetClickArgs(click);
        ClientHost.Pipelines.Run(PipelineNames.GetClick, args);

        click = args.Click;
        if (string.IsNullOrEmpty(click))
        {
          return MvcHtmlString.Empty;
        }

        var name = item.Name.GetSafeIdentifier() + "Click";

        return new HtmlString(string.Format("href=\"#\" data-sc-id=\"{0}\" data-sc-presenter=\"{1}\" data-sc-component=\"Bootstrap3-Click\" data-sc-require=\"/sitecore/shell/-/speak/v1/client/Bootstrap3-Click.js\" data-bind=\"click: click, enable: isEnabled, visible: isVisible\" data-sc-properties=\"{{ "isEnabled":"true", "isVisible":"true" }}\" data-sc-click=\"{2}\"", name, SpeakSettings.Components.KnockoutPresenter, HttpUtility.HtmlAttributeEncode(click)));
      }

      if (ID.IsID(click))
      {
        var target = item.Database.GetItem(click);
        if (target != null)
        {
          var options = new UrlOptions
          {
            AddAspxExtension = false
          };

          var itemUrl = LinkManager.GetItemUrl(target, options);
          return new HtmlString("href=\"" + HttpUtility.HtmlAttributeEncode(itemUrl) + "\"");
        }
      }

      return new HtmlString("href=\"" + HttpUtility.HtmlAttributeEncode(click) + "\"");
    }