Example #1
0
 public RazorPageActivator(
     IModelMetadataProvider metadataProvider,
     IUrlHelperFactory urlHelperFactory,
     IJsonHelper jsonHelper,
     DiagnosticSource diagnosticSource,
     HtmlEncoder htmlEncoder,
     IModelExpressionProvider modelExpressionProvider)
 {
     _RazorPageActivator = new MvcRazor.RazorPageActivator(metadataProvider, urlHelperFactory, jsonHelper, diagnosticSource, htmlEncoder, modelExpressionProvider);
 }
Example #2
0
 public LocalizationFixPageFactoryProvider(
     IPageActivatorProvider pageActivator,
     IModelMetadataProvider metadataProvider,
     IUrlHelperFactory urlHelperFactory,
     IJsonHelper jsonHelper,
     DiagnosticSource diagnosticSource,
     HtmlEncoder htmlEncoder,
     IModelExpressionProvider modelExpressionProvider)
     : base(pageActivator, metadataProvider, urlHelperFactory, jsonHelper, diagnosticSource, htmlEncoder, modelExpressionProvider)
 {
 }
 public FormFieldAttributeProvider(
     IModelMetadataProvider metadataProvider,
     IModelExpressionProvider expressionProvider,
     IHtmlGenerator generator,
     IViewContextGenerator viewContextGenerator)
 {
     _generator            = generator;
     _viewContextGenerator = viewContextGenerator;
     _expressionProvider   = expressionProvider;
     _metadataProvider     = metadataProvider;
 }
Example #4
0
        public static IHtmlContent ComboBoxFor <TModel, TValue>(this IHtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TValue> > expression, List <string> selectItems, object htmlAttributes = null)
        {
            if (htmlHelper == null)
            {
                throw new ArgumentNullException(nameof(htmlHelper));
            }

            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }
            if (selectItems == null)
            {
                selectItems = new List <string>();
            }
            IModelExpressionProvider modelExpressionProvider = htmlHelper.ViewContext.HttpContext.RequestServices
                                                               .GetService(typeof(ModelExpressionProvider)) as ModelExpressionProvider;
            ModelExpression modelExpression = modelExpressionProvider.CreateModelExpression(htmlHelper.ViewData, expression);

            //return new HtmlString($"<span>propName: {modelExpression.Metadata.PropertyName} | value: {(string)modelExpression.Model}<span>");

            TagBuilder divBuilder = new TagBuilder("div");

            divBuilder.AddCssClass("autocomplete");
            TagBuilder inputBuilder = new TagBuilder("input");

            inputBuilder.GenerateId(modelExpression.Metadata.PropertyName, "_");
            inputBuilder.Attributes.Add("name", modelExpression.Metadata.PropertyName);
            inputBuilder.Attributes.Add("autocomplete", "off");
            TagBuilder datasourceBuilder = new TagBuilder("div");

            datasourceBuilder.GenerateId($"{modelExpression.Metadata.PropertyName}#datasource", "_");
            datasourceBuilder.AddCssClass("autocomplete-datasource");
            foreach (var selectItem in selectItems)
            {
                //datasourceBuilder.Attributes.Add("data-source", string.Join(',', selectItems));
                var item = new TagBuilder("div");
                item.AddCssClass("autocomplete-datasource-item");
                item.Attributes.Add("autocomplete-datasource-item", selectItem);
                datasourceBuilder.InnerHtml.AppendHtml(item);
            }
            divBuilder.InnerHtml.AppendHtml(inputBuilder);
            divBuilder.InnerHtml.AppendHtml(datasourceBuilder);
            if (htmlAttributes != null)
            {
                inputBuilder.MergeAttributes(GetHtmlAttributeDictionaryOrNull(htmlAttributes));
            }

            return(divBuilder);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="RazorPageActivator"/> class.
 /// </summary>
 public RazorPageActivator(
     IModelMetadataProvider metadataProvider,
     IUrlHelperFactory urlHelperFactory,
     IJsonHelper jsonHelper,
     DiagnosticSource diagnosticSource,
     HtmlEncoder htmlEncoder,
     IModelExpressionProvider modelExpressionProvider)
 {
     _activationInfo                  = new ConcurrentDictionary <Type, PageActivationInfo>();
     _metadataProvider                = metadataProvider;
     _urlHelperAccessor               = context => urlHelperFactory.GetUrlHelper(context);
     _jsonHelperAccessor              = context => jsonHelper;
     _diagnosticSourceAccessor        = context => diagnosticSource;
     _htmlEncoderAccessor             = context => htmlEncoder;
     _modelExpressionProviderAccessor = context => modelExpressionProvider;
 }
Example #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RazorPageActivator"/> class.
 /// </summary>
 public RazorPageActivator(
     IModelMetadataProvider metadataProvider,
     IUrlHelperFactory urlHelperFactory,
     IJsonHelper jsonHelper,
     DiagnosticSource diagnosticSource,
     HtmlEncoder htmlEncoder,
     IModelExpressionProvider modelExpressionProvider)
 {
     _activationInfo = new ConcurrentDictionary<Type, PageActivationInfo>();
     _metadataProvider = metadataProvider;
     _urlHelperAccessor = context => urlHelperFactory.GetUrlHelper(context);
     _jsonHelperAccessor = context => jsonHelper;
     _diagnosticSourceAccessor = context => diagnosticSource;
     _htmlEncoderAccessor = context => htmlEncoder;
     _modelExpressionProviderAccessor = context => modelExpressionProvider;
 }
        public static async Task <string> VueEditorColFor_string <TModel, TResult>(
            this IHtmlHelper <TModel> helper,
            Expression <Func <TModel, TResult> > expression,
            bool alwaysReadonly    = false,
            string cssClass        = null,
            bool showInactiveItems = false)
        {
            IModelExpressionProvider expressionProvider = helper.ViewContext.HttpContext.RequestServices.GetRequiredService <IModelExpressionProvider>();
            ModelExpression          expr = expressionProvider.CreateModelExpression(helper.ViewData, expression);

            string propName = expr.Metadata.PropertyName;

            propName = Char.ToLowerInvariant(propName[0]) + propName.Substring(1);

            string description     = expr.Metadata.Description;
            string describedBy     = "";
            string descriptionHtml = "";

            if (!string.IsNullOrEmpty(description))
            {
                describedBy     = $@" aria-describedby=""{propName}_descr""";
                descriptionHtml = $@"
<div id=""{propName}_descr"" class=""form-text"">
{WebUtility.HtmlEncode(description)}
</div>";
            }

            string html = $@"<div class=""col"">";

            string editor = await helper.VueEditorFor_string(
                expression,
                addLabel : true,
                alwaysReadonly : alwaysReadonly,
                describedBy : describedBy,
                cssClass : cssClass,
                showInactiveItems : showInactiveItems);

            html += editor;
            html += descriptionHtml;

            html += $@"
  <div id=""{propName}_feedback"" class=""invalid-feedback""></div>
</div>";

            return(html);
        }
Example #8
0
 /// <summary>
 /// Initialize a <see cref="RegisterProviderOutput"/>.
 /// </summary>
 protected RegisterProviderOutput(
     ViewDataDictionary viewData,
     IHtmlGenerator htmlGenerator,
     IModelExpressionProvider modelExpressionProvider,
     ViewContext originalViewContext,
     IJsonHelper jsonHelper,
     IViewComponentHelper viewComponentHelper,
     IUrlHelper urlHelper)
 {
     ViewData  = viewData;
     Generator = htmlGenerator;
     ModelExpressionProvider = modelExpressionProvider;
     ViewContext             = new ViewContext(originalViewContext, originalViewContext.View, viewData, originalViewContext.Writer);
     Json      = jsonHelper;
     Component = viewComponentHelper;
     Url       = urlHelper;
 }
Example #9
0
 /// <summary>
 /// Initialize a <see cref="RegisterProviderOutput{TModel}"/>.
 /// </summary>
 public RegisterProviderOutput(
     ViewContext viewContext,
     TModel model,
     IModelExpressionProvider modelExpressionProvider,
     IJsonHelper jsonHelper,
     IViewComponentHelper viewComponentHelper,
     IUrlHelper urlHelper,
     string prefix = "")
     : base(Create(viewContext.ViewData, model, prefix),
            GetHtmlGenerator(viewContext.HttpContext),
            modelExpressionProvider,
            viewContext,
            jsonHelper,
            viewComponentHelper,
            urlHelper)
 {
     CanBeRequired = string.IsNullOrWhiteSpace(prefix);
 }
 private static DefaultPageFactoryProvider CreatePageFactory(
     IPageActivatorProvider pageActivator = null,
     IModelMetadataProvider provider      = null,
     IUrlHelperFactory urlHelperFactory   = null,
     IJsonHelper jsonHelper            = null,
     DiagnosticSource diagnosticSource = null,
     HtmlEncoder htmlEncoder           = null,
     IModelExpressionProvider modelExpressionProvider = null)
 {
     return(new DefaultPageFactoryProvider(
                pageActivator ?? CreateActivator(),
                provider ?? Mock.Of <IModelMetadataProvider>(),
                urlHelperFactory ?? Mock.Of <IUrlHelperFactory>(),
                jsonHelper ?? Mock.Of <IJsonHelper>(),
                diagnosticSource ?? new DiagnosticListener("Microsoft.AspNetCore.Mvc.RazorPages"),
                htmlEncoder ?? HtmlEncoder.Default,
                modelExpressionProvider ?? Mock.Of <IModelExpressionProvider>()));
 }
 public DefaultPageFactoryProvider(
     IPageActivatorProvider pageActivator,
     IModelMetadataProvider metadataProvider,
     IUrlHelperFactory urlHelperFactory,
     IJsonHelper jsonHelper,
     DiagnosticSource diagnosticSource,
     HtmlEncoder htmlEncoder,
     IModelExpressionProvider modelExpressionProvider)
 {
     _pageActivator         = pageActivator;
     _modelMetadataProvider = metadataProvider;
     _propertyAccessors     = new RazorPagePropertyActivator.PropertyValueAccessors
     {
         UrlHelperAccessor               = context => urlHelperFactory.GetUrlHelper(context),
         JsonHelperAccessor              = context => jsonHelper,
         DiagnosticSourceAccessor        = context => diagnosticSource,
         HtmlEncoderAccessor             = context => htmlEncoder,
         ModelExpressionProviderAccessor = context => modelExpressionProvider,
     };
 }
Example #12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RazorPageActivator"/> class.
        /// </summary>
        public RazorPageActivator(
            IModelMetadataProvider metadataProvider,
            IUrlHelperFactory urlHelperFactory,
            IJsonHelper jsonHelper,
            DiagnosticSource diagnosticSource,
            HtmlEncoder htmlEncoder,
            IModelExpressionProvider modelExpressionProvider)
        {
            _activationInfo   = new ConcurrentDictionary <CacheKey, RazorPagePropertyActivator>();
            _metadataProvider = metadataProvider;

            _propertyAccessors = new RazorPagePropertyActivator.PropertyValueAccessors
            {
                UrlHelperAccessor               = context => urlHelperFactory.GetUrlHelper(context),
                JsonHelperAccessor              = context => jsonHelper,
                DiagnosticSourceAccessor        = context => diagnosticSource,
                HtmlEncoderAccessor             = context => htmlEncoder,
                ModelExpressionProviderAccessor = context => modelExpressionProvider,
            };
        }
Example #13
0
 public NetCore3Impl(IModelExpressionProvider expressionProvider)
 {
     ExpressionProvider = expressionProvider;
 }
        public static IEnumerable <IHtmlContent> HiddenForWizardStep <TModel, TValue>(this IHtmlHelper <TModel> helper, WizardStep step, Expression <Func <TModel, TValue> > expression, IModelExpressionProvider m)
        {
            var model = m.CreateModelExpression(helper.ViewData, expression).Model;

            foreach (var html in helper.HiddenForWizardStep(model, step))
            {
                yield return(html);
            }
        }
Example #15
0
 public ModelMetadata(IModelExpressionProvider expressionHelper, ViewDataDictionary <TModel> viewDataDictionary)
 {
     m_expressionHelper   = expressionHelper;
     m_viewDataDictionary = viewDataDictionary;
 }
Example #16
0
 /// <inheritdoc cref="IRegisterProvider.CreateOutputRenderer(ViewContext, object, IModelExpressionProvider, IJsonHelper, IViewComponentHelper, IUrlHelper)" />
 protected virtual RegisterProviderOutput <TOutputModel> CreateOutputRenderer(ViewContext viewContext, TOutputModel model, IModelExpressionProvider modelExpressionProvider, IJsonHelper jsonHelper, IViewComponentHelper viewComponentHelper, IUrlHelper urlHelper)
 => new RegisterProviderOutput <TOutputModel>(viewContext, model, modelExpressionProvider, jsonHelper, viewComponentHelper, urlHelper);
Example #17
0
 RegisterProviderOutput IRegisterProvider.CreateOutputRenderer(ViewContext a, object b, IModelExpressionProvider c, IJsonHelper d, IViewComponentHelper e, IUrlHelper f)
 => CreateOutputRenderer(a, (TOutputModel)b, c, d, e, f);
Example #18
0
 /// <inheritdoc />
 protected override sealed RegisterProviderOutput <StatusMessageModel> CreateOutputRenderer(ViewContext viewContext, StatusMessageModel model, IModelExpressionProvider modelExpressionProvider, IJsonHelper jsonHelper, IViewComponentHelper viewComponentHelper, IUrlHelper urlHelper)
 => throw new System.NotSupportedException();
        public static async Task <string> VueEditorFor_string <TModel, TResult>(
            this IHtmlHelper <TModel> helper,
            Expression <Func <TModel, TResult> > expression,
            bool addLabel,
            bool alwaysReadonly    = false,
            string describedBy     = null,
            string cssClass        = null,
            bool showInactiveItems = false)
        {
            IModelExpressionProvider expressionProvider = helper.ViewContext.HttpContext.RequestServices.GetRequiredService <IModelExpressionProvider>();
            ModelExpression          expr = expressionProvider.CreateModelExpression(helper.ViewData, expression);

            string propName = expr.Metadata.PropertyName;

            propName = Char.ToLowerInvariant(propName[0]) + propName.Substring(1);

            string displayName = expr.Metadata.DisplayName ?? "";

            if (displayName.StartsWith("html:"))
            {
                displayName = displayName.Substring(5);
            }
            else
            {
                displayName = WebUtility.HtmlEncode(displayName);
            }

            Type modelType = expr.Metadata.ModelType;

            modelType = Nullable.GetUnderlyingType(modelType) ?? modelType;

            bool isBool      = modelType == typeof(bool);
            bool isEnum      = modelType.IsEnum;
            bool isDate      = modelType.IsAssignableFrom(typeof(DateTime));
            bool isMultiLine = false;
            bool isHtml      = false;

            string editableClass = alwaysReadonly ? "" : " editable";

            MultiLineTextAttribute matt = null;


            List <CustomEntityRenderSummary> customEntities = null;

            SelectListItem[] enumCollectionItems = null;

            MemberInfo[] memberInfo = expr.Metadata.ContainerType.GetMember(expr.Metadata.PropertyName);

            bool implementICollection = modelType.IsGenericType && modelType.GetGenericTypeDefinition() == typeof(ICollection <>);

            if (modelType == typeof(int))
            {
                CustomEntityAttribute att = (CustomEntityAttribute)memberInfo[0].GetCustomAttributes(typeof(CustomEntityAttribute), false).FirstOrDefault();
                if (att != null)
                {
                    customEntities = (await helper.ViewContext.HttpContext.RequestServices.GetRequiredService <IAdvancedContentRepository>()
                                      .CustomEntities()
                                      .GetByDefinitionCode(att.CustomEntityDefinitionCode)
                                      .AsRenderSummary()
                                      .ExecuteAsync())
                                     .Where(e => showInactiveItems || (e.Model is IActiveState a && a.IsActive))
                                     .OrderBy(e => e.Ordering)
                                     .ToList();
                }
            }
            else if (implementICollection)
            {
                CheckboxListAttribute att = (CheckboxListAttribute)memberInfo[0].GetCustomAttributes(typeof(CheckboxListAttribute), false).FirstOrDefault();
                if (att != null)
                {
                    if (att.OptionSource.IsEnum)
                    {
                        Type enumType = Nullable.GetUnderlyingType(att.OptionSource) ?? att.OptionSource;
                        enumCollectionItems = Enum.GetValues(enumType).Cast <Enum>()
                                              .Select(e => new SelectListItem(e.GetDescription(), e.ToString()))
                                              .ToArray();
                    }
                }
            }

            if (modelType == typeof(string))
            {
                HtmlAttribute att = (HtmlAttribute)memberInfo[0].GetCustomAttributes(typeof(HtmlAttribute), false).FirstOrDefault();
                if (att != null)
                {
                    isHtml = true;
                }

                matt = (MultiLineTextAttribute)memberInfo[0].GetCustomAttributes(typeof(MultiLineTextAttribute), false).FirstOrDefault();
                if (matt != null)
                {
                    isMultiLine = true;
                }
            }

            if (!string.IsNullOrEmpty(cssClass))
            {
                cssClass = " " + cssClass;
            }

            string html = "";

            if (isBool)
            {
                html += $@"
<input type=""checkbox"" id=""{propName}"" v-model=""{propName}"" class=""form-check-input{editableClass}{cssClass}"" v-on:change=""clearValidation"" disabled{describedBy}> ";

                if (addLabel)
                {
                    html += $@" <label for=""{propName}"" class=""form-label"">{displayName}</label>";
                }
            }
            else
            {
                if (addLabel)
                {
                    html += $@"
<label for=""{propName}"" class=""form-label"">{displayName}</label>";
                }

                if (isEnum)
                {
                    Type             enumType = Nullable.GetUnderlyingType(expr.Metadata.ModelType) ?? expr.Metadata.ModelType;
                    SelectListItem[] items    = Enum.GetValues(enumType).Cast <Enum>()
                                                .Select(e => new SelectListItem(e.GetDescription(), e.ToString()))
                                                .ToArray();

                    html += $@"
<select id=""{propName}"" v-model=""{propName}"" class=""form-select{editableClass}{cssClass}"" v-on:change=""clearValidation"" disabled{describedBy}>";

                    if (expr.Metadata.IsNullableValueType)
                    {
                        html += $@"<option value="""">- Vælg -</option>";
                    }

                    foreach (var item in Enum.GetValues(enumType).Cast <Enum>())
                    {
                        html += $@"
<option value=""{item}"">{WebUtility.HtmlEncode(item.GetDescription())}</option>";
                    }

                    html += @"
</select>";
                }
                else if (isDate)
                {
                    html += $@"
<v-date-picker v-model=""{propName}"" v-on:change=""clearValidation"" mode=""date"" timezone=""UTC"" :model-config=""datePickerConfig"" :masks=""dateMasks"">
  <template v-slot=""{{ inputValue, inputEvents }}"">
    <input id=""{propName}"" class=""form-control"" autocomplete=""off"" :value=""inputValue"" v-on=""inputEvents"" :disabled=""!isEditing""/>
  </template>
</v-date-picker>";
                }
                else if (enumCollectionItems != null)
                {
                    foreach (var item in enumCollectionItems)
                    {
                        html += $@"
<div class=""checkboxListItem"">
<input type=""checkbox"" id=""check{item.Value}"" value=""{item.Value}"" class=""form-check-input{editableClass}{cssClass}"" v-model=""{propName}"" :disabled=""!isEditing""/>
<label for=""check{item.Value}"">{item.Text}</label>
</div>
";
                    }
                }
                else if (customEntities != null)
                {
                    html += $@"
<select id=""{propName}"" v-model=""{propName}"" class=""form-select{editableClass}{cssClass}"" v-on:change=""clearValidation"" disabled{describedBy}>";
                    if (expr.Metadata.IsNullableValueType)
                    {
                        html += $@"<option value="""">- Vælg -</option>";
                    }

                    foreach (var item in customEntities)
                    {
                        string activeStr = ((item.Model is IActiveState a) && !a.IsActive)
              ? " disabled"
              : "";

                        html += $@"
<option value=""{item.CustomEntityId}""{activeStr}>{WebUtility.HtmlEncode(item.Title)}</option>";
                    }

                    html += @"
</select>";
                }
                else if (isMultiLine)
                {
                    html += $@"
<textarea id=""{propName}"" v-model=""{propName}"" rows=""{matt.Rows}"" class=""form-control{editableClass}{cssClass}"" v-on:change=""clearValidation"" readonly{describedBy}></textarea>";
                }
                else if (isHtml)
                {
                    html += $@"
<html-editor id=""{propName}"" height=""500""></html-editor>";
                }
                else
                {
                    html += $@"
<input type=""text"" id=""{propName}"" v-model=""{propName}"" class=""form-control{editableClass}{cssClass}"" v-on:change=""clearValidation"" readonly{describedBy}>";
                }
            }

            return(html);
        }
 public SpaRazorPageActivator(IHttpContextAccessor httpContextAccessor, IModelMetadataProvider metadataProvider, IUrlHelperFactory urlHelperFactory, IJsonHelper jsonHelper, DiagnosticSource diagnosticSource, HtmlEncoder htmlEncoder, IModelExpressionProvider modelExpressionProvider)
 {
     this.HttpContextAccessor = httpContextAccessor;
     this.DefaultActivator    = new RazorPageActivator(metadataProvider, urlHelperFactory, jsonHelper,
                                                       diagnosticSource, htmlEncoder, modelExpressionProvider);
 }