/// <summary>
        /// Creates a hyperlink.
        /// </summary>
        /// <param name="behavior">The behavior. Pass a <see cref="ResourceInfo"/> to navigate to the resource in the default way, or call
        /// <see cref="HyperlinkBehaviorExtensionCreators.ToHyperlinkNewTabBehavior(ResourceInfo, bool)"/> or
        /// <see cref="HyperlinkBehaviorExtensionCreators.ToHyperlinkModalBoxBehavior(ResourceInfo, bool, BrowsingContextSetup)"/>. For a mailto link, call
        /// <see cref="HyperlinkBehaviorExtensionCreators.ToHyperlinkBehavior(Email.EmailAddress, string, string, string, string)"/>. If you need to add additional
        /// JavaScript action statements to any behavior, we recommend using the jQuery document ready event to add a click handler to the appropriate a element(s),
        /// which you can select using a class if there is no simpler way.</param>
        /// <param name="style">The style.</param>
        /// <param name="displaySetup"></param>
        /// <param name="classes">The classes on the hyperlink.</param>
        public EwfHyperlink(HyperlinkBehavior behavior, HyperlinkStyle style, DisplaySetup displaySetup = null, ElementClassSet classes = null)
        {
            children = new DisplayableElement(
                context => {
                behavior.PostBackAdder();
                return(new DisplayableElementData(
                           displaySetup,
                           () => {
                    DisplayableElementFocusDependentData getFocusDependentData(bool isFocused) =>
                    new DisplayableElementFocusDependentData(
                        attributes: behavior.AttributeGetter(false),
                        includeIdAttribute: behavior.IncludesIdAttribute(false) || isFocused,
                        jsInitStatements: StringTools.ConcatenateWithDelimiter(
                            " ",
                            behavior.JsInitStatementGetter(context.Id, false),
                            style.GetJsInitStatements(context.Id),
                            isFocused ? "document.getElementById( '{0}' ).focus();".FormatWith(context.Id) : ""));

                    return behavior.IsFocusable
                                                                       ? new DisplayableElementLocalData("a", new FocusabilityCondition(true), getFocusDependentData)
                                                                       : new DisplayableElementLocalData("a", focusDependentData: getFocusDependentData(false));
                },
                           classes: behavior.Classes.Add(style.GetClasses()).Add(classes ?? ElementClassSet.Empty),
                           children: style.GetChildren(behavior.Url.Value),
                           etherealChildren: behavior.EtherealChildren));
            }).ToCollection();
        }
        private ElementActivationBehavior(ResourceInfo resource = null, FormAction action = null, string script = "")
        {
            if (action == null && !script.Any())
            {
                HyperlinkBehavior hyperlinkBehavior = resource;

                Classes               = hyperlinkBehavior.HasDestination ? ActivatableClass : ElementClassSet.Empty;
                AttributeGetter       = () => hyperlinkBehavior.AttributeGetter(true);
                IncludesIdAttribute   = () => hyperlinkBehavior.IncludesIdAttribute(true);
                EtherealChildren      = hyperlinkBehavior.EtherealChildren;
                JsInitStatementGetter = id => hyperlinkBehavior.JsInitStatementGetter(id, true);
                IsFocusable           = hyperlinkBehavior.IsFocusable;
                PostBackAdder         = hyperlinkBehavior.PostBackAdder;
            }
            else
            {
                var buttonBehavior = action != null ? (ButtonBehavior) new FormActionBehavior(action) : new CustomButtonBehavior(() => script + ";");

                Classes               = ActivatableClass;
                AttributeGetter       = () => buttonBehavior.GetAttributes().Materialize();
                IncludesIdAttribute   = buttonBehavior.IncludesIdAttribute;
                EtherealChildren      = buttonBehavior.GetEtherealChildren();
                JsInitStatementGetter = buttonBehavior.GetJsInitStatements;
                IsFocusable           = true;
                PostBackAdder         = buttonBehavior.AddPostBack;
            }
        }
 private ElementActivationBehavior(HyperlinkBehavior hyperlinkBehavior)
 {
     Classes               = hyperlinkBehavior.HasDestination ? ActivatableClass : ElementClassSet.Empty;
     AttributeGetter       = () => hyperlinkBehavior.AttributeGetter(true);
     IncludesIdAttribute   = () => hyperlinkBehavior.IncludesIdAttribute(true);
     EtherealChildren      = hyperlinkBehavior.EtherealChildren;
     JsInitStatementGetter = id => hyperlinkBehavior.JsInitStatementGetter(id, true);
     IsFocusable           = hyperlinkBehavior.IsFocusable;
     PostBackAdder         = hyperlinkBehavior.PostBackAdder;
 }
Пример #4
0
 /// <summary>
 /// Creates a hyperlink.
 /// </summary>
 /// <param name="behavior">The behavior. Pass a <see cref="ResourceInfo"/> to navigate to the resource in the default way, or call
 /// <see cref="HyperlinkBehaviorExtensionCreators.ToHyperlinkNewTabBehavior(ResourceInfo)"/>. For a mailto link, call
 /// <see cref="HyperlinkBehaviorExtensionCreators.ToHyperlinkBehavior(Email.EmailAddress, string, string, string, string)"/>.</param>
 /// <param name="style">The style.</param>
 /// <param name="displaySetup"></param>
 /// <param name="classes">The classes on the hyperlink.</param>
 public EwfHyperlink(HyperlinkBehavior behavior, HyperlinkStyle style, DisplaySetup displaySetup = null, ElementClassSet classes = null)
 {
     children = new DisplayableElement(
         context => {
         behavior.PostBackAdder();
         return(new DisplayableElementData(
                    displaySetup,
                    () =>
                    new DisplayableElementLocalData(
                        "a",
                        attributes: behavior.AttributeGetter(),
                        includeIdAttribute: behavior.IncludeIdAttribute,
                        jsInitStatements: behavior.JsInitStatementGetter(context.Id) + style.GetJsInitStatements(context.Id)),
                    classes: behavior.Classes.Add(style.GetClasses()).Add(classes ?? ElementClassSet.Empty),
                    children: style.GetChildren(behavior.Url),
                    etherealChildren: behavior.EtherealChildren));
     }).ToCollection();
 }