示例#1
0
        public static IHtmlContent RAToolbarShowDialogButton(
            this IHtmlHelper htmlHelper,
            string buttonText,
            string contentUrl,
            string returnUrl             = null,
            object htmlAttributes        = null,
            string dialogTitle           = null,
            bool showActionButton        = true,
            string actionButtonCaption   = "Save",
            bool showCancelButton        = true,
            string cancelButtonCaption   = "Cancel",
            string buttonClass           = "btn-secondary",
            string buttonStyle           = null,
            RAModalDialogSize dialogSize = RAModalDialogSize.Medium)
        {
            var attributes = HtmlHelperHelper.ToAttributesDictionary(htmlAttributes);

            attributes.AddToolbarButtonAttributes();

            return(htmlHelper.RAShowModalDialogButton(
                       buttonText,
                       contentUrl,
                       returnUrl,
                       attributes,
                       dialogTitle,
                       showActionButton,
                       actionButtonCaption,
                       showCancelButton,
                       cancelButtonCaption,
                       buttonClass,
                       buttonStyle,
                       dialogSize));
        }
        public static IHtmlContent RAShowDialogLink(
            this IHtmlHelper htmlHelper,
            string linkText,
            string contentUrl,
            string returnAction          = null,
            object htmlAttributes        = null,
            string dialogTitle           = null,
            bool showActionButton        = true,
            string actionButtonCaption   = "Save",
            bool showCancelButton        = true,
            string cancelButtonCaption   = "Cancel",
            RAModalDialogSize dialogSize = RAModalDialogSize.Medium)
        {
            var attributes = HtmlHelperHelper.ToAttributesDictionary(htmlAttributes);

            attributes.AddOrInsertToExisting("class", "ra-clickable");
            attributes.Add("href", "#");
            attributes.Add("onmouseup", htmlHelper.RAShowModalDialogScript(contentUrl, returnAction, dialogTitle ?? linkText,
                                                                           showActionButton, actionButtonCaption, showCancelButton, cancelButtonCaption, dialogSize));

            var tagBuilder = new TagBuilder("a")
            {
                TagRenderMode = TagRenderMode.Normal
            };

            tagBuilder.MergeAttributes(attributes);
            tagBuilder.InnerHtml.AppendHtml(linkText);

            return(tagBuilder);
        }
        public static IHtmlContent FileFor <TModel, TProperty>(this IHtmlHelper <TModel> helper,
                                                               Expression <Func <TModel, TProperty> > expression, object htmlAttributes = null)
        {
            var builder    = new TagBuilder("input");
            var attributes = HtmlHelperHelper.ToAttributesDictionary(htmlAttributes);

            var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(
                helper.GetExpressionText(expression));

            builder.GenerateId(id, "");
            builder.MergeAttribute("name", id);
            builder.MergeAttribute("type", "file");
            builder.MergeAttributes(attributes);
            builder.TagRenderMode = TagRenderMode.SelfClosing;

            return(builder);
        }
        public static IHtmlContent RAButton(
            this IHtmlHelper htmlHelper,
            string buttonHtml,
            string actionScript,
            object htmlAttributes = null,
            string buttonId       = null,
            string buttonClass    = "btn-secondary",
            string buttonStyle    = null,
            string buttonType     = "button")
        {
            var attributes = HtmlHelperHelper.ToAttributesDictionary(htmlAttributes);

            attributes.AddButtonAttributes(buttonClass, buttonStyle, buttonType);
            if (!string.IsNullOrEmpty(buttonId))
            {
                attributes.AddIfMissing("id", buttonId);
            }
            attributes.Add("onmouseup", actionScript);

            return(attributes.ToButton(buttonHtml));
        }
        public static IHtmlContent RADropdownItem(
            this IHtmlHelper htmlHelper,
            string itemHtml,
            string actionScript,
            object htmlAttributes = null)
        {
            var attributes = HtmlHelperHelper.ToAttributesDictionary(htmlAttributes);

            attributes.AddOrInsertToExisting("class", "dropdown-item ra-dropdown-item");
            attributes.AddOrInsertToExisting("onmousedown", actionScript);

            var tagBuilder = new TagBuilder("a")
            {
                TagRenderMode = TagRenderMode.Normal
            };

            tagBuilder.MergeAttributes(attributes);
            tagBuilder.InnerHtml.AppendHtml(itemHtml);

            return(tagBuilder);
        }
示例#6
0
        public static IHtmlContent RAToolbarButton(
            this IHtmlHelper htmlHelper,
            string buttonText,
            object htmlAttributes = null,
            string navigateToUrl  = null,
            string buttonClass    = "btn-secondary",
            string buttonStyle    = null,
            bool newWindow        = false)
        {
            var action = newWindow ? "newWindowTo" : "navigateTo";

            var attributes = HtmlHelperHelper.ToAttributesDictionary(htmlAttributes);

            attributes.AddButtonAttributes(buttonClass, buttonStyle);
            attributes.AddToolbarButtonAttributes();
            if (!String.IsNullOrEmpty(navigateToUrl))
            {
                attributes.AddOrAppendToExisting("onmouseup", $"{action}('{navigateToUrl}');");
            }

            return(attributes.ToButton(buttonText));
        }
        public static IHtmlContent RAShowModalDialogButton(
            this IHtmlHelper htmlHelper,
            string buttonHtml,
            string contentUrl,
            string returnAction          = null,
            object htmlAttributes        = null,
            string dialogTitle           = null,
            bool showActionButton        = true,
            string actionButtonCaption   = "Save",
            bool showCancelButton        = true,
            string cancelButtonCaption   = "Cancel",
            string buttonClass           = "btn-secondary",
            string buttonStyle           = null,
            RAModalDialogSize dialogSize = RAModalDialogSize.Medium)
        {
            var attributes = HtmlHelperHelper.ToAttributesDictionary(htmlAttributes);

            attributes.AddButtonAttributes(buttonClass, buttonStyle);
            attributes.Add("onmouseup", htmlHelper.RAShowModalDialogScript(contentUrl, returnAction, dialogTitle ?? buttonHtml,
                                                                           showActionButton, actionButtonCaption, showCancelButton, cancelButtonCaption, dialogSize));

            return(attributes.ToButton(buttonHtml));
        }
        private static IHtmlContent GetEditorFor <TModel, TProperty>(
            this IHtmlHelper <TModel> htmlHelper,
            Expression <Func <TModel, TProperty> > expression,
            ModelExplorer modelExplorer,
            object htmlAttributes           = null,
            SelectList selectList           = null,
            RAEditorType?editorTypeOverride = null,
            bool isToolbar = false,
            string selectListOptionLabel = null)
        {
            var content = new HtmlContentBuilder();

            var attributes = HtmlHelperHelper.ToAttributesDictionary(htmlAttributes);

            attributes.AddOrInsertToExisting("class", "form-control");

            // Gather data.
            var nullableUnderlyingType = Nullable.GetUnderlyingType(modelExplorer.ModelType);
            var dataTypeAttribute      = expression.GetAttribute <TModel, TProperty, DataTypeAttribute>();
            var zipCodeAttribute       = expression.GetAttribute <TModel, TProperty, ZipCodeAttribute>();

            // Create a dynamic select list for enum types.
            if (selectList == null)
            {
                if (modelExplorer.ModelType.IsEnum)
                {
                    selectList = SelectListHelper.EnumToSelectList(modelExplorer.ModelType);
                }
                else if (nullableUnderlyingType != null && nullableUnderlyingType.IsEnum)
                {
                    selectList = SelectListHelper.EnumToSelectList(nullableUnderlyingType);
                }
            }

            if (selectList != null)
            {
                // Check for radio button specification.
                if (editorTypeOverride.HasValue && editorTypeOverride.Value == RAEditorType.RadioButton)
                {
                    foreach (var item in selectList)
                    {
                        var enumValue = Enum.Parse(modelExplorer.ModelType, item.Value);
                        content.AppendHtml(htmlHelper.RARadioButtonFor(expression, enumValue,
                                                                       ((Enum)enumValue).ToDisplayString(), attributes));
                    }
                }
                // Else use a dropdown.
                else
                {
                    if (isToolbar)
                    {
                        attributes.AddOrAppendToExisting("class", "ra-toolbar-dropdown");
                    }
                    content.AppendHtml(htmlHelper.DropDownListFor(expression, selectList, selectListOptionLabel, attributes));
                }
            }
            else if (modelExplorer.ModelType == typeof(bool) ||
                     (editorTypeOverride.HasValue && editorTypeOverride.Value == RAEditorType.Boolean))
            {
                const string TRUE  = "Yes";
                const string FALSE = "No";
                content.AppendHtml("<div class='form=group'><span class='switch switch-sm'>");
                attributes.AddIfMissing("data-checked", TRUE);
                attributes.AddIfMissing("data-unchecked", FALSE);
                attributes.AddOrAppendToExisting("onclick", "raUpdateFlipswitchLabel(this);");
                content.AppendHtml(htmlHelper.CheckBoxFor(expression as Expression <Func <TModel, bool> >, attributes));
                content.AppendHtml(htmlHelper.LabelFor(expression,
                                                       (bool)modelExplorer.Model ? attributes["data-checked"].ToString() : attributes["data-unchecked"].ToString(), null));
                content.AppendHtml("</span></div>");
            }
            else if (modelExplorer.ModelType == typeof(DateTime) || modelExplorer.ModelType == typeof(DateTime?) ||
                     (editorTypeOverride.HasValue && editorTypeOverride.Value == RAEditorType.Date))
            {
                var value = String.Empty;
                if (modelExplorer.ModelType == typeof(DateTime))
                {
                    value = ((DateTime)modelExplorer.Model).ToString("yyyy-MM-dd");
                }
                else if (modelExplorer.ModelType == typeof(DateTime?))
                {
                    value = ((DateTime?)modelExplorer.Model)?.ToString("yyyy-MM-dd");
                }
                attributes.Add("Value", value);
                //attributes.AddOrAppendToExisting("class", "ra-behavior-datepicker ra-clickable");
                if (isToolbar)
                {
                    attributes.AddOrAppendToExisting("class", "ra-toolbar-datepicker");
                }
                //attributes.AddIfMissing("readonly", "true");
                attributes.AddIfMissing("type", "date");

                // TODO: We really just need to format the date property in TextBoxFor,
                // but supplying the format doesn't appear to be working.
                var temp  = htmlHelper.TextBoxFor(expression, attributes).GetString();
                var temp2 = temp.FindFirstBetween("value=\"", "\"");
                if (temp2.HasText() && value.HasText())
                {
                    temp = temp.Replace(temp2, value);
                }
                content.AppendHtml(temp);
            }
            else if (modelExplorer.ModelType.IsNumeric() ||
                     (editorTypeOverride.HasValue && editorTypeOverride == RAEditorType.Number))
            {
                attributes.AddIfMissing("type", "number");
                if (modelExplorer.ModelType == typeof(decimal) || modelExplorer.ModelType == typeof(decimal?))
                {
                    attributes.AddIfMissing("placeholder", "0.00");
                    attributes.AddIfMissing("min", "0");
                    attributes.AddIfMissing("oninput", "onInputCurrency(event)");
                }
                content.AppendHtml(htmlHelper.TextBoxFor(expression, attributes));
            }
            else if (dataTypeAttribute?.DataType == DataType.PostalCode || zipCodeAttribute != null ||
                     (editorTypeOverride.HasValue && editorTypeOverride.Value == RAEditorType.ZipCode))
            {
                attributes.AddIfMissing("inputmode", "numeric");
                attributes.AddIfMissing("pattern", "[0-9]*");
                content.AppendHtml(htmlHelper.TextBoxFor(expression, attributes));
            }
            else if (dataTypeAttribute?.DataType == DataType.PhoneNumber || expression.HasAttribute(typeof(PhoneAttribute)) ||
                     (editorTypeOverride.HasValue && editorTypeOverride.Value == RAEditorType.PhoneNumber))
            {
                attributes.AddIfMissing("inputmode", "numeric");
                attributes.AddIfMissing("pattern", "[0-9]*");
                content.AppendHtml(htmlHelper.TextBoxFor(expression, attributes));
            }
            else if (dataTypeAttribute?.DataType == DataType.EmailAddress || expression.HasAttribute(typeof(EmailAddressAttribute)) ||
                     (editorTypeOverride.HasValue && editorTypeOverride.Value == RAEditorType.Email))
            {
                attributes.AddIfMissing("type", "email");
                content.AppendHtml(htmlHelper.TextBoxFor(expression, attributes));
            }
            else if (dataTypeAttribute?.DataType == DataType.Password || expression.HasAttribute(typeof(PasswordAttribute)))
            {
                attributes.Add("value", modelExplorer.Model?.ToString());
                content.AppendHtml(htmlHelper.PasswordFor(expression, attributes));
            }
            else
            {
                if (modelExplorer.ModelType == typeof(IFormFile))
                {
                    content.AppendHtml(htmlHelper.FileFor(expression, attributes));
                }
                else if (dataTypeAttribute?.DataType == DataType.MultilineText ||
                         (editorTypeOverride.HasValue && editorTypeOverride.Value == RAEditorType.TextMultiLine))
                {
                    //attributes.AddOrAppendToExisting("class", "ra-container-scrollable-y");   // JVE: Does not appear to work correctly.
                    attributes.AddIfMissing("rows", 4);
                    content.AppendHtml(htmlHelper.TextAreaFor(expression, attributes));
                }
                else
                {
                    if (editorTypeOverride.HasValue && editorTypeOverride.Value == RAEditorType.Number)
                    {
                        attributes.AddIfMissing("type", "number");
                    }

                    content.AppendHtml(htmlHelper.TextBoxFor(expression, attributes));
                }
            }

            return(content);
        }