コード例 #1
0
        public TextboxControl(ControlModel <TProperty> model, string type = "text", bool disableAutocomplete = false, bool hideStatusMessage = false, string helpText = "")
        {
            if ("password".Equals(type, StringComparison.OrdinalIgnoreCase))
            {
                // SECURITY: never render the password
                model.Value = default(TProperty);
            }

            var inner = new ControlHolder()
                        .Append(new Label <TProperty>(model));

            var tb = new TextBox <TProperty>(model, type, disableAutocomplete);

            if (!string.IsNullOrEmpty(helpText))
            {
                tb.AppendHtml(new HelpText(helpText).ToString());
            }

            if (!hideStatusMessage)
            {
                tb.After(new StatusMessage());
            }

            inner.Append(tb.WrapWith(new ControlWrapper()));

            Inner = inner;
        }
        private static void BuildCheckbox(HtmlTag currentParent, IEnumerable <HierarchicalCheckBoxListItem> options,
                                          ControlModel <TProperty> model, bool isDisabled, int level)
        {
            foreach (var option in options)
            {
                var selectListItem = new SelectListItem
                {
                    Text     = option.Text,
                    Value    = option.Value,
                    Selected = option.Selected
                };

                var divCtrlHolder = new ControlHolder().Append(new HtmlTag("span").AddClass("label")).Id(selectListItem.Value);
                var divOption     = new HtmlTag("div", tag => tag.AddClass("option"));

                divOption.Append(new HierarchicalCheckboxItem <TProperty>(model, selectListItem, isDisabled));
                divOption.After(new StatusMessage());
                divCtrlHolder.Append(divOption.WrapWith(new ControlWrapper()));

                currentParent.Append(divCtrlHolder);

                if (!option.Children.Any())
                {
                    continue;
                }

                level++;

                var divChildrenHolder = new HtmlTag("div").AddClass($"ctrl-lvl-{level}");

                currentParent.Append(divChildrenHolder);

                BuildCheckbox(divChildrenHolder, option.Children, model, isDisabled, level);
            }
        }
コード例 #3
0
        public DateControl(ControlModel <DateTime?> model, DateOptions dateOptions = null)
        {
            var inner = new ControlHolder()
                        .Append(new Label <DateTime?>(model));

            var tb = new TextBox <DateTime?>(model)
                     .After(new StatusMessage());

            inner.Append(tb.WrapWith(new ControlWrapper()));

            tb.AddClass("datepicker js-datepicker vh");
            tb.Attr("aria-hidden", "true");

            dateOptions = dateOptions ?? new DateOptions();

            if (model.Value != null)
            {
                tb.Value(model.Value?.ToString(dateOptions.Format));
            }

            tb.Data("format", dateOptions.Format.ToUpperInvariant());
            tb.Data("output-format", dateOptions.OutputFormat.ToUpperInvariant());
            tb.Data("year-range", dateOptions.YearRange);
            tb.Data("today", dateOptions.ShowToday);

            Inner = inner;
        }
コード例 #4
0
        public TextAreaControl(ControlModel <TProperty> model)
        {
            var inner = new ControlHolder()
                        .Append(new Label <TProperty>(model));

            var tb = new TextArea <TProperty>(model)
                     .After(new StatusMessage());

            // always wrap
            inner.Append(tb.WrapWith(new ControlWrapper()));

            Inner = inner;
        }
コード例 #5
0
        public SelectControl(ControlModel <TProperty> model, IEnumerable <SelectListItem> items,
                             bool hideStatusMessage = false)
        {
            var select = new Select <TProperty>(model, items);

            if (!hideStatusMessage)
            {
                select.After(new StatusMessage());
            }

            // always wrap
            var control = select.WrapWith(new ControlWrapper());


            Inner = new ControlHolder()
                    .Append(new Label <TProperty>(model))
                    .Append(control);
        }
コード例 #6
0
        public CheckBoxControl(ControlModel <bool> model, string tooltip, string helptext)
        {
            // div class="ctrl-holder"
            Inner = new ControlHolder().Append(new Label <bool>(model, true));

            // div class="option"
            var divOption = new HtmlTag("div", tag => tag.AddClass("option"));

            // refer the native MVC implementation of CheckBoxFor
            // checkboxes behave weirdly - if they are not checked then they are not posted back
            // the fallback value of False is supplied by the hidden field
            divOption.Append(CheckBox(model, tooltip, helptext));
            divOption.Append(new HiddenTag().Name(model.Name).Value(bool.FalseString));

            // div class="status-msg"
            divOption.After(new StatusMessage());

            Inner.Append(divOption.WrapWith(new ControlWrapper()));
        }
        public DateofBirthControl(ControlModel <DateTime?> model)
        {
            var dayName   = model.Name + "-" + "day";
            var monthName = model.Name + "-" + "month";
            var yearName  = model.Name + "-" + "year";

            model.AddRule("dob", "Please enter a valid date of birth.", RuleType.DataAttribute);

            var dayModel   = new ControlModel <int?>(dayName, dayName, model.Value?.Day, "Day", model.Rules, LabelOption.Hide);
            var monthModel = new ControlModel <string>(monthName, monthName, model.Value?.Month.ToString("D2"), "Month", model.Rules, LabelOption.Hide);
            var yearModel  = new ControlModel <int?>(yearName, yearName, model.Value?.Year, "Year", model.Rules, LabelOption.Hide);

            Inner = new ControlHolder().AddClass("js-dob")
                    .Append(new Label <DateTime?>(new ControlModel <DateTime?>(dayName, dayName, model.Value, model.DisplayName, model.Rules, model.LabelOption)))
                    .Append(new HtmlTag("div", tag => tag.AddClass("ctrls"))
                            .Append(new TextboxControl <int?>(dayModel, hideStatusMessage: true).Attribute("maxlength", "2").Placeholder("DD").AddClass("width-date-day").Inner)
                            .Append(new SelectControl <string>(monthModel, Months, hideStatusMessage: true).AddClass("width-date-month").Inner)
                            .Append(new TextboxControl <int?>(yearModel, hideStatusMessage: true).Attribute("maxlength", "4").Placeholder("YYYY").AddClass("width-date-year").Inner)
                            // hidden field gets populated by javaScript and is what is POSTED back
                            .Append(new HiddenTag().Name(model.Name).Id(model.Name).Data("dob-bind-value", "DD MMM YYYY").Value(model.Value?.ToString("dd MMM yyyy") ?? ""))
                            ).Append(new StatusMessage());
        }
コード例 #8
0
        public RadioCheckBoxListControl(ControlModel <TProperty> model, IEnumerable <SelectListItem> items, string type, bool isHorizontal)
        {
            var options = items.ToList();

            if (!options.Any())
            {
                return;
            }

            Inner = new ControlHolder()
                    .Append(new Label <TProperty>(model, true));

            var ul = new HtmlTag("ul");

            ul.AddClass("options");
            ul.Attr("role", "radiogroup");
            ul.Attr("aria-labelledby", model.Name);

            if (isHorizontal)
            {
                ul.AddClass("is-horizontal");
            }

            foreach (var item in options)
            {
                var li = new HtmlTag("li", tag => tag.AddClass("option"));

                li.Append(new RadioCheckboxItem <TProperty>(model, item, type));

                ul.Append(li);
            }

            ul.After(new StatusMessage());

            Inner.Append(ul.WrapWith(new ControlWrapper()));
        }